【问题标题】:# splitting the string dynamically in sql server 2008# 在 sql server 2008 中动态拆分字符串
【发布时间】:2012-06-29 09:54:06
【问题描述】:

我有一个这样的字符串:

","","","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

帮帮我!

感谢和问候, 阿南德

【问题讨论】:

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

标签: tsql sql-server-2008r2-express


【解决方案1】:

我怀疑这会像其他人建议的子字符串方法一样快速,但它可能更具可读性,不管它是另一种选择。

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] 

【讨论】:

    【解决方案2】:

    使用SUBSTRING 函数,并假设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]
    

    【讨论】:

      【解决方案3】:

      一种可能的解决方案:

      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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        相关资源
        最近更新 更多