小编adi*_*iti的帖子

在Sql Server 2005中将字符串拆分为单个字符

嗨,我有一个输入

ID  data
1   hello
2   sql
Run Code Online (Sandbox Code Playgroud)

期望的输出是

ID  RowID  Chars
1    1     H
1    2     e
1    3     l
1    4     l
1    5     o
2    1     s
2    2     q
2    3     l
Run Code Online (Sandbox Code Playgroud)

我的方法到目前为止

Declare @t table(ID  INT IDENTITY , data varchar(max))
Insert into @t Select 'hello' union all select 'sql'
--Select * from @t
;With CteMaxlen As(
Select MaxLength = max(len(data)) from @t)
, Num_Cte AS
(     
      SELECT 1 AS rn
      UNION ALL
      SELECT rn +1 AS …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005

7
推荐指数
1
解决办法
5158
查看次数

使用CTE进行字符串拆分的有效方法

我有一张看起来像的桌子

ID  Layout
1   hello,world,welcome,to,tsql
2   welcome,to,stackoverflow
Run Code Online (Sandbox Code Playgroud)

期望的输出应该是

Id  Splitdata
1   hello
1   world
1   welcome
1   to
1   tsql
2   welcome
2   to
2   stackoverflow
Run Code Online (Sandbox Code Playgroud)

我已通过以下查询完成此操作

Declare @t TABLE(
    ID  INT IDENTITY PRIMARY KEY,
    Layout VARCHAR(MAX)
)
INSERT INTO @t(Layout)
SELECT 'hello,world,welcome,to,tsql' union all
SELECT 'welcome,to,stackoverflow'
--SELECT * FROM @t
;With cte AS(
select F1.id
 ,O.splitdata 
 from
 (
 select *,
 cast('<X>'+replace(F.Layout,',','</X><X>')+'</X>' as XML) as xmlfilter
 from @t F
 )F1
 cross apply
 ( 
 select fdata.D.value('.','varchar(MAX)') as splitdata 
 from f1.xmlfilter.nodes('X') as …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 common-table-expression

7
推荐指数
1
解决办法
2万
查看次数

使用distinct子句进行排序

考虑以下

empname salary
a   10000
b   5000
c   5000
Run Code Online (Sandbox Code Playgroud)

如果我做 select distinct salary from @t

输出是

salary
5000
10000
Run Code Online (Sandbox Code Playgroud)

它已被排序......为什么这样?

sql sql-server

5
推荐指数
2
解决办法
141
查看次数