我有一個員工表,我試圖在 SQL Server 中只獲取逗號值。
Emp 桌子:
| 開齋節 | 名稱 |
|---|---|
| 1 | 彼得,J |
| 2 | 邁克,S |
| 3 | , |
| 4 | ,,,,,,, |
我試過這個代碼:
SELECT
(LEN(ename) - LEN(REPLACE(ename, ',', ''))
FROM emp;
如果值只包含逗號,我不會得到長度 0。
預期結果:我只想要 3 和 4 個 emp id。
uj5u.com熱心網友回復:
如果您在只包含逗號的行之后,您可以使用一些模式匹配:
SELECT ID, ename
FROM dbo.YourTable
WHERE EName NOT LIKE '%[^,]%';
該模式將匹配任何不是逗號的字符,然后NOT LIKE有效地反轉它;意味著只回傳包含逗號(或零長度字串)的行。如果您也想省略零長度字串,則在 中添加一個附加子句WHERE以排除它們。
uj5u.com熱心網友回復:
請嘗試以下解決方案。
SQL #1使用 XML/Query對ename列進行標記。
Predicater[text()]選取具有任何值的標記。
SQL #2 要簡單得多。
SQL #1
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, ename VARCHAR(255));
INSERT INTO @tbl (ename) VALUES
('Peter,J'),
('Mike,S'),
(','),
(', , , ,');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = ',';
SELECT *
FROM @tbl
CROSS APPLY (SELECT CAST('<root><r><![CDATA['
REPLACE(REPLACE(ename,SPACE(1),''), @separator, ']]></r><r><![CDATA[')
']]></r></root>' AS XML).query('
for $x in /root/r[text()]
return $x
').value('.','VARCHAR(255)')) AS t1(c)
WHERE c = '';
輸出
---- --------- ---
| ID | ename | c |
---- --------- ---
| 3 | , | |
| 4 | , , , , | |
---- --------- ---
SQL #2
SELECT *
FROM @tbl
CROSS APPLY (SELECT REPLACE(ename, ',','')) AS t(c)
WHERE c = '';
輸出
---- --------- ---
| ID | ename | c |
---- --------- ---
| 3 | , | |
| 4 | , , , , | |
---- --------- ---
uj5u.com熱心網友回復:
select x.eid,x.ename
from
(
select 1 eid,'Peter,J' ename union
select 2 eid,'Mike,S' ename union
select 3 eid, ',' ename union
select 4 eid,',,,,,' ename
) x
where len(x.ename)>0 and len( replace(x.ename,',','') ) =0
答案是條件行“where ....”
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365087.html
標籤:sql sql-server
上一篇:加入遞回表
下一篇:回傳行,當兩個條件為真時
