在 SQL Server 中,我試圖獲取第二個和第三個正斜杠 ( /
) 字符之間的值。數字的長度可能會有所不同,因此substring(column, 8, 10)
不起作用。
123/123/123456789/12
我想在當前示例中得到的是:123456789
uj5u.com熱心網友回復:
請嘗試以下基于標記化的解決方案。
無論有多少令牌,此方法都是通用的。
它將從 SQL Server 2012 開始作業。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(100));
INSERT @tbl (tokens) VALUES
('123/123/123456789/12'),
('123/123/9876543210/12');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = '/';
SELECT t.*
, ThirdToken = c.value('(/root/r[position() eq 3]/text())[1]', 'VARCHAR(100)')
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA['
REPLACE(tokens, @separator, ']]></r><r><![CDATA[')
']]></r></root>' AS XML)) AS t1(c);
輸出
ID | 代幣 | 第三代幣 |
---|---|---|
1 | 123/123/123456789/12 | 123456789 |
2 | 123/123/9876543210/12 | 9876543210 |
uj5u.com熱心網友回復:
如圖所示,您的資料有 4 個部分,您可以濫用parsename函式:
declare @string varchar(50) = '123/123/123456789/12';
select ParseName(Replace(@string,'/','.'),2);
uj5u.com熱心網友回復:
由于您是 2016 年,請考慮以下事項
例子
Declare @YourTable table (ID int,SomeCol varchar(50))
Insert Into @YourTable values
(1,'123/123/123456789/12')
Select A.ID
,Pos3 = JSON_VALUE(JS,'$[2]')
From @YourTable A
Cross Apply (values ('["' replace(SomeCol,'/','","') '"]') ) B(JS)
結果
ID Pos3
1 123456789
如果您只需要單個值,則不需要CROSS APPLY
Select A.ID
,Pos3 = JSON_VALUE('["' replace(SomeCol,'/','","') '"]','$[2]')
From @YourTable A
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530022.html
標籤:sql服务器子串特点