2014-02-14 94 views
1

(MS SQL only 2008R2) 我想知道如何在字符串中每次出現timestamp (##:##:##)之前和之後添加Char(10)換行。SQL - 添加字符(10)換行

所以,如果我有一串"askdfjaksdfja asfd kj 03:56:34 sdfas 09:56:12 sdfa sd sss dg",那麼我希望所有的##:##:##都有一個換行符,每個換行符前後都有。

timestamps可能是任何時候,字符串可能是任何東西。

謝謝!

+0

Vanilla TSQL不是真正的字符串解析(慢,沒有正則表達式等)的最佳選擇。你有其他的編程工具嗎? – StingyJack

+0

不,不是真的。這是針對少量數據的一次(可能是幾次)查詢。 – Kevin

+0

@SingyJack不完全相同 – Kevin

回答

1

有一次?好的...繼承人一槍。你可以把它包裝在一個函數中,並在你的表格查詢中使用它。您可能需要調整這取決於您想支持多少邊緣案例。您可以通過更改在@replace中展示的數據集來實現。

set nocount on; 

declare @string varchar(max); 
set @string = 'askdfjaksdfja asfd kj 03:56:34 sdfas 09:56:12 sdfa sd sss dg 42test x77:xx '; 

declare @replace table (this char(4), that char(4)); 

with digits(NN) as 
(
    select top 60 right('0'+cast(row_number() over(order by object_id)-1 as varchar), 2) 
    from sys.all_columns --use your numbers table 
) 
insert into @replace 
    --replace " NN:" with "char(10)+NN:" 
    select space(1)+NN+':', 
      char(10)+NN+':' 
    from digits 
    union all 
    --replace ":NN " with ":NN+char(10)" 
    select ':'+NN+space(1), 
      ':'+NN+char(10) 
    from digits; 

select @string = replace(@string, this, that) 
from @replace 
where charindex(this, @string)>0; 

select @string 
+0

我在查詢中添加了所有'00'的聯合,以便在字符串中存在'00'時工作。 – Kevin