Tsql #在sql server 2008中动态拆分字符串

Tsql #在sql server 2008中动态拆分字符串,tsql,sql-server-2008r2-express,Tsql,Sql Server 2008r2 Express,我有这样一个字符串: ","","","41","20120627063343-0210600-41" 我这样写查询是为了拆分上面的字符串 declare @s varchar(max) set @s = '","","","41","20120627063343-0210600-41"' select right(replace(@s,',',''),26) as output 我得到以下输出 output ------- 20120627063343-0210600-41" 对于上面的

我有这样一个字符串:

","","","41","20120627063343-0210600-41"
我这样写查询是为了拆分上面的字符串

declare @s varchar(max)
set @s = '","","","41","20120627063343-0210600-41"'
select right(replace(@s,',',''),26) as output
我得到以下输出

output
-------
20120627063343-0210600-41"
对于上面的字符串,我想要这样的输出

YEAR         TIME         NO        ID
----         -----       ----      ---- 
2012-06-27    06:33:43    0210600   41
救救我

感谢和问候, Anand

使用函数,并假设
20120627063343-0210600-41
的字符串示例始终为相同的固定长度,则可以提取所需的所有部分。试试这个:

declare @s varchar(max)
declare @t varchar(max)
set @s = '","","","41","20120627063343-0210600-41"'
set @t = right(@s, 26) 

select left(@t, 4) + '-' + substring(@t, 5, 2) + '-' + substring(@t, 7, 2) AS [YEAR],
    substring(@t, 9, 2) + ':' + substring(@t, 11, 2) + ':' + substring(@t, 13, 2) AS [HOUR],
    substring(@t, 16, 7) AS [NO], 
    substring(@t, 24, 2) AS [ID]
一种可能的解决办法:

declare @s varchar(max), @test varchar(26)
set @s = '","","","41","20120627063343-0210600-41"'
select @test = left(right(replace(@s,',',''),26),25)


select SUBSTRING(@test, 1, 4) + '-' + SUBSTRING(@test, 5, 2) + '-' + SUBSTRING(@test, 7, 2) as 'YEAR',
       SUBSTRING(@test, 9, 2) + ':' + SUBSTRING(@test, 11, 2) + ':' + SUBSTRING(@test, 13, 2) as 'TIME',
       SUBSTRING(@test, 16, 7) as 'NO',
       SUBSTRING(@test, 24, 2) as 'ID'
我怀疑这会像其他人建议的子字符串方法一样快,但它可能更可读,不管它是另一种选择

DECLARE @parsedString VARCHAR(255)
DECLARE @inputString VARCHAR(255)

SET @inputString = '","","","41","20120627063343-0210600-41"' 
SET @parsedString = REPLACE(REPLACE(REPLACE(REPLACE(@inputString, '-', '.'), '",', '.'), '"', ''), '...', '')

SELECT  PARSENAME(@parsedString, 1) as [Id],
        PARSENAME(@parsedString, 2) as [No],
        CAST(LEFT(PARSENAME(@parsedString, 3), 8) AS DATE) as [Year],
        STUFF(STUFF(RIGHT(PARSENAME(@parsedString, 3), 6), 3, 0, ':'), 6, 0, ':') as [Time] 

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它@user1444281-你解决过这个问题吗?