Lak*_*ake 5 null sql-server ssms t-sql
我试图通过使用 SELECT 和我提供给编译器的集合中的一个(随机?)字符串来替换表中的 NULL 值。
例子:
|id | date |
+---+------+
| 1 | 2017 |
| 2 | NULL |
| 3 | NULL |
Run Code Online (Sandbox Code Playgroud)
我希望NULL
值是“2015”、“2012”等,从我指定的集合中随机获取。
不幸的是,COALESCE
只返回第一个非空值,而不是指定的值。是否有一些功能,如:
IF column_value = 'NULL (or something)' THEN RAND(string1, string2, string3, string4).
Run Code Online (Sandbox Code Playgroud)
提前致谢。
你可以使用类似的东西
SELECT Id,
ISNULL(Date, (SELECT TOP 1 *
FROM (VALUES(2015),
(2012)) R(Ryear)
ORDER BY CRYPT_GEN_RANDOM(DATALENGTH(Id))))
FROM YourTable
Run Code Online (Sandbox Code Playgroud)
到参考Id
的ORDER BY
是只是为了让相关以便SQL Server是不太可能阀芯结果和重放它多行。为此选择一个唯一的列。
顺便说一句:有一个CHOOSE
函数看起来很诱人,但是当它扩展到CASE
随机数函数时也会被复制出来,所以这不适合这项任务。
不要用这个
SELECT Id,
CHOOSE(1 + ABS(CRYPT_GEN_RANDOM(4) % 2),2015,2012)
FROM YourTable
Run Code Online (Sandbox Code Playgroud)
因为它被评估为
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
Run Code Online (Sandbox Code Playgroud)
(并且CASE ABS(CRYPT_GEN_RANDOM(4) % 2) WHEN 0 THEN 2012 WHEN 1 THEN 2015 END
会有同样的问题)
归档时间: |
|
查看次数: |
166 次 |
最近记录: |