0

次のような文字列があります。

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

助けて!

よろしくお願いします、 アナンド

4

3 に答える 3

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] 
于 2012-06-29T10:26:24.513 に答える
0

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]
于 2012-06-29T10:02:59.287 に答える
0

考えられる解決策の 1 つ:

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'
于 2012-06-29T10:07:10.667 に答える