我試圖在 SQL Server 中解決這個問題。當在線出現以下情況時,我需要獲取客戶的姓名:
以任何[字母]/[數字][空格][數字][空格]開頭
我用過[A-Z]/[0-9]%,但我不能考慮空格和數字序列后跟另一個空格
這是我正在處理的線路:
K/31209536 9997530556 RICARDO JOSE DE OLIVEIRA QUEIROZ
當條件為真時,我需要獲取名稱:
RICARDO JOSE DE OLIVEIRA QUEIROZ
uj5u.com熱心網友回復:
如前所述,SQL Server 不支持完整的正則運算式。
這是一種基于通過 XML 和 XQuery進行標記化的方法。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (StringColumn varchar(4000));
INSERT @tbl VALUES
('K/31209536 9997530556 RICARDO JOSE DE OLIVEIRA QUEIROZ');
-- DDL and sample data population, end
DECLARE @separator CHAR(2) = SPACE(2);
SELECT t.*
, c.value('(/root/r[last()]/text())[1]', 'VARCHAR(150)') AS Result
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA['
REPLACE(StringColumn, @separator, ']]></r><r><![CDATA[')
']]></r></root>' AS XML)) AS t1(c);
uj5u.com熱心網友回復:
SQL Server 沒有本機 RegEx 支持,但您可以在 SQL Server 2016 (和兼容級別 130 )中做一件事:
SELECT Original, ImportantPart = REVERSE([value])
FROM
(
SELECT Original = t.StringColumn,[key],[value]
FROM dbo.YourTableName AS t
CROSS APPLY OPENJSON('["' REPLACE(
REVERSE(LTRIM(RTRIM(t.StringColumn))),
' ', '","') '"]')
) AS j WHERE [key] = 0;
這個小提琴中的作業示例。
這些型別的體操肯定背叛了您應該更好地規范您的資料(例如,為什么不將名稱存盤在其自己的列中?)。
uj5u.com熱心網友回復:
似乎帶有一點字串操作的 CASE 運算式應該可以解決問題
示例或dbFiddle
Select CustName = case when patindex('[A-Z]/[0-9][0-9][0-9]%',SomeCol)>0
then right(SomeCol,charindex(' ',reverse(SomeCol))-1)
end
From YourTable
uj5u.com熱心網友回復:
嘗試這個:
[A-Z]\/\d \s \d \s ((\w \s?) )
該名稱將在第 1 組中。
或使用命名組(稱為name):
[A-Z]\/\d \s \d \s (?<name>(\w \s?) )
在這里查看:https ://regex101.com/r/GO3CjM/1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525468.html
標籤:sqlsql服务器细绳
