如何將“a”替換為空白?
`Name` `ID`
----------------------------------
`b,c,d,e,abb,a` `1`
`b,c,d,a,e,abb` `2`
`a,b,c,d,a,e,abb` `3`
uj5u.com熱心網友回復:
一種方法是在,每個 的開頭和結尾添加 a Name,然后用 替換每個出現的地方',a,',','然后修剪 的結果,:
update table_name
set Name = trim(',' from replace(concat(',', Name, ','), ',a,', ','));
小提琴
或者,如果您只想執行 aselect而不更改行:
select trim(',' from replace(concat(',', Name, ','), ',a,', ',')) as Name, ID
from table_name;
為了解決@Iptr的評論,如果可以有連續的a例如a, a, ...,您可以使用STRING_SPLIT從逗號分隔的值中獲取行,然后過濾掉值的位置,a然后取回逗號分隔的值:STRING_AGGgroup by
select ID, STRING_AGG(u.Value, ',') as Name
from table_name
cross apply STRING_SPLIT (Name, ',') u
where Value <> 'a'
group by ID
小提琴
uj5u.com熱心網友回復:
這是一個基于通過 XML/XQuery 進行標記化的解決方案。
它將從 SQL Server 2012 開始作業。
腳步:
- 我們正在通過 XML 標記一串標記。
- XQuery FLWOR 運算式正在過濾掉“a”標記。
- 將其還原為一串令牌。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(1000));
INSERT INTO @tbl (tokens) VALUES
('b,c,d,e,abb,a'),
('b,c,d,a,e,abb'),
('a,b,c,d,a,e,abb');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = ',';
SELECT t.*
, REPLACE(c.query('
for $x in /root/r/text()
return if ($x = "a") then ()
else data($x)
').value('.', 'VARCHAR(MAX)'), SPACE(1), @separator) AS Result
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 | tokens | Result |
---- ----------------- -------------
| 1 | b,c,d,e,abb,a | b,c,d,e,abb |
| 2 | b,c,d,a,e,abb | b,c,d,e,abb |
| 3 | a,b,c,d,a,e,abb | b,c,d,e,abb |
---- ----------------- -------------
uj5u.com熱心網友回復:
嘗試如下:
select Replace(name, N'a', N'') as RepName , ID from yourTable
uj5u.com熱心網友回復:
試試這個。
SELECT ID,Name, REPLACE(Name, 'a', ' ') FROM tableName;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420170.html
標籤:
下一篇:SQL單個列上的多個約束
