我有一個 nvarchar(50) 列myCol,其值類似于這些 16 位字母數字值,以“0”開頭:
0b00d60b8d6cfb19, 0b00d60b8d6cfb05, 0b00d60b8d57a2b9
我正在嘗試洗掉myCol值與這 3 個條件不匹配的行。
通過閱讀這篇文章,我能夠選擇以“0”開頭的記錄。然而,盡管有[a-z0-9]正則運算式的一部分,它也不斷選擇myCol包含特殊字符的值,如00-d@!b8-d6/f&#b. 以下是我的選擇查詢:
SELECT * from Table
WHERE myCol LIKE '[0][a-z0-9]%' AND LEN(myCol) = 16
應該如何更改運算式以僅選擇具有myCol不包含特殊字符的值的行?
uj5u.com熱心網友回復:
如果該值只能包含 az 和數字,并且必須以 a 開頭,0則可以使用以下內容:
SELECT *
FROM (VALUES(N'0b00d60b8d6cfb19'),
(N'0b00d60b8d6cfb05'),
(N'0b00d60b8d57a2b9'),
(N'00-d@!b8-d6/f&#b'))V(myCol)
WHERE V.myCol LIKE '0%' --Checks starts with a 0
AND V.myCol NOT LIKE '%[^0-9A-z]%' --Checks only contains alphanumerical characters
AND LEN(V.myCol) = 16;
第二個子句的作用是LIKE匹配任何不是字母數字字符的字符。then(顯然)反轉了這NOT一點,這意味著運算式僅在值僅包含字母數字字符時才決議為 TRUE。
uj5u.com熱心網友回復:
SQL Server 中的模式匹配并不出色,目前還沒有真正的正則運算式支持。
您的%模式中包含您在示例中顯示的特殊字符。[a-z0-9]僅匹配單個字符。如果您的字符長度為 16,并且您只對字母和數字感興趣,那么您可以為每個字符添加一個模式:
SELECT *
FROM Table
WHERE myCol LIKE '[0][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]';
注意:你不需要AND LEN(myCol) = 16這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474587.html
上一篇:Sql確定沒有價值的行
