我有一個超過 300 萬行的表,但是其中一列中的一些資料是錯誤的 - 我想在錯誤時將其設為 NULL。
我想創建一個 CASE WHEN 'wrong' THEN = 'NULL'。列資料型別為 nvarchar(50),每個系列應以數字、字母和字母結尾,即 1AA、1AB 或 2DA 等。所有與我要轉換的數字、字母、字母組合的最終排列不匹配的內容為 NULL。
UPDATE T1
SET T1.ABC = CASE
WHEN RIGHT(ABC <> number, letter, letter)
THEN ABC = 'NULL'
end
任何想法將不勝感激!
uj5u.com熱心網友回復:
要將無效列設定為 NULL,可以使用帶有 WHERE 子句的 UPDATE 陳述句
UPDATE T1
SET ABC = NULL
WHERE ABC NOT LIKE '%[0-9][A-Z][A-Z]'
通配符%代表零個或多個字符。因此,這個 LIKE 模式忽略了文本的開頭并測驗了它的最后 3 個字符。
uj5u.com熱心網友回復:
謝謝您的幫助。答案的組合對我有幫助。
UPDATE T1
SET T1.ABC = REPLACE(RIGHT(RTRIM(ABC ), LEN(RTRIM(ABC ))-3), ' ','')
WHERE ABC LIKE '%[0-9][A-Z][A-Z]'
其余的都保留為 NULL
uj5u.com熱心網友回復:
在不使用正則運算式的情況下添加另一種可能的方法
UPDATE T1
SET T1.ABC = CASE
WHEN try_cast(left(col1,1) as int)<> null and try_cast(left(right(col1,2),1) as int) = null and try_cast(right(col1,1) as int) = null
THEN T1.ABC = T1.ABC
else ABC = NULL
end
上述方法會更新所有記錄,耗時且服務器負載大。相反,我們可以過濾記錄然后更新它們。
UPDATE T1 SET T1.ABC = NULL where
CASE WHEN try_cast(left(col1,1) as int)<> null and try_cast(left(right(col1,2),1) as int) = null and try_cast(right(col1,1) as int) = null THEN 1 else 0 end = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/418751.html
標籤:
