Sql-Server
用提供的列表中的一個字元串替換 NULL 值
我試圖通過使用 SELECT 與我提供給編譯器的集合中的一個(隨機?)字元串來替換錶中的 NULL 值。
例子:
|id | date | +---+------+ | 1 | 2017 | | 2 | NULL | | 3 | NULL |
我希望這些
NULL
值是“2015”、“2012”等,從我指定的集合中隨機獲取。不幸的是
COALESCE
,只返回第一個非空值,而不是指定的值。是否有一些功能類似於:IF column_value = 'NULL (or something)' THEN RAND(string1, string2, string3, string4).
提前致謝。
你可以使用類似的東西
SELECT Id, ISNULL(Date, (SELECT TOP 1 * FROM (VALUES(2015), (2012)) R(Ryear) ORDER BY CRYPT_GEN_RANDOM(DATALENGTH(Id)))) FROM YourTable
Id
中的引用ORDER BY
只是為了使其相關,以便 SQL Server 不太可能假離線結果並將其重放多行。為此選擇一個唯一的列。順便說一句:有一個
CHOOSE
函式看起來很誘人,但是當它擴展到CASE
隨機數時,函式也會被複製出來,因此不適合該任務。不要使用這個
SELECT Id, CHOOSE(1 + ABS(CRYPT_GEN_RANDOM(4) % 2),2015,2012) FROM YourTable
因為它被評估為
CASE WHEN (1 + ABS(CRYPT_GEN_RANDOM(4) % 2)) = 1 THEN 2015 ELSE CASE WHEN (1 + ABS(CRYPT_GEN_RANDOM(4) % 2)) = 2 THEN 2012 ELSE NULL END END
(並且
CASE ABS(CRYPT_GEN_RANDOM(4) % 2) WHEN 0 THEN 2012 WHEN 1 THEN 2015 END
會有同樣的問題)