我在表的字串列中有這樣的資料:[Product] -> "LA100_Runner_35C924_D"。從這個資料我想得到第二個之后的資料_,所以我想得到35C924_D。
我怎么做?
我試過WHERE [Product] LIKE '%_%' escape ''了,但我不能讓它作業。我想不出 LIKE 操作想要什么。
uj5u.com熱心網友回復:
這是通過 XML 和 XQuery 使用標記化的另一種方法。
XPath 謂詞[position() ge 3]要求從第 3 個開始獲取所有標記。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, Product VARCHAR(100));
INSERT @tbl (Product) VALUES
('LA100_Runner_35C924_D'),
('MA200_Runner_77C924_D');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = '_';
SELECT t.*
, Result = REPLACE(c.query('data(/root/r[position() ge 3])')
.value('text()[1]', 'VARCHAR(100)'), SPACE(1), @separator)
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA['
REPLACE(Product, @separator, ']]></r><r><![CDATA[')
']]></r></root>' AS XML)) AS t1(c);
輸出
| ID | 產品 | 結果 |
|---|---|---|
| 1 | LA100_Runner_35C924_D | 35C924_D |
| 2 | MA200_Runner_77C924_D | 77C924_D |
uj5u.com熱心網友回復:
一種選擇是在相同的字串上應用兩次SUBSTRING 的組合PATINDEX,同時在第一個下劃線符號上進行拆分,如下所示:
WITH cte AS (
SELECT SUBSTRING(string, PATINDEX('%[_]%', string) 1, LEN(string)) AS string
FROM tab
)
SELECT SUBSTRING(string, PATINDEX('%[_]%', string) 1, LEN(string))
FROM cte
在此處查看演示。
您也可以使用RIGHT PATINDEX以非常相似的方式執行相同操作:
WITH cte AS (
SELECT RIGHT(string, LEN(string) - PATINDEX('%[_]%', string)) AS string
FROM tab
)
SELECT RIGHT(string, LEN(string) - PATINDEX('%[_]%', string)) AS string
FROM cte
在此處查看演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525809.html
標籤:sql服务器tsql
上一篇:將行轉換為列,并將字串的行連接成一個帶有指定分隔符的字串
下一篇:合并和轉置表
