(MS SQL only 2008R2) 我想知道如何在字符串中每次出現timestamp (##:##:##)
之前和之後添加Char(10)
換行。SQL - 添加字符(10)換行
所以,如果我有一串"askdfjaksdfja asfd kj 03:56:34 sdfas 09:56:12 sdfa sd sss dg"
,那麼我希望所有的##:##:##
都有一個換行符,每個換行符前後都有。
timestamps
可能是任何時候,字符串可能是任何東西。
謝謝!
(MS SQL only 2008R2) 我想知道如何在字符串中每次出現timestamp (##:##:##)
之前和之後添加Char(10)
換行。SQL - 添加字符(10)換行
所以,如果我有一串"askdfjaksdfja asfd kj 03:56:34 sdfas 09:56:12 sdfa sd sss dg"
,那麼我希望所有的##:##:##
都有一個換行符,每個換行符前後都有。
timestamps
可能是任何時候,字符串可能是任何東西。
謝謝!
有一次?好的...繼承人一槍。你可以把它包裝在一個函數中,並在你的表格查詢中使用它。您可能需要調整這取決於您想支持多少邊緣案例。您可以通過更改在@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
我在查詢中添加了所有'00'的聯合,以便在字符串中存在'00'時工作。 – Kevin
Vanilla TSQL不是真正的字符串解析(慢,沒有正則表達式等)的最佳選擇。你有其他的編程工具嗎? – StingyJack
不,不是真的。這是針對少量數據的一次(可能是幾次)查詢。 – Kevin
@SingyJack不完全相同 – Kevin