如果第一个值不为空,则用另一个值替换一个值
Replace a value with another value if that first value is not null
我有以下情况(请 运行 虚拟数据集),其中 FS_Number 有真实的 FS_Numbers,NULL 和随机文本,例如 N/A_ADMINIS2
这需要用 FS_Number1
中的值替换
SELECT 1 AS ID, 214565 AS FS_Number1, Null AS FS_Number
UNION
SELECT 2 AS ID, null AS FS_Number1, '759843' AS FS_Number
UNION
SELECT 3 AS ID, null AS FS_Number1, '243545' AS FS_Number
UNION
SELECT 4 AS ID, null AS FS_Number1, '655342' AS FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, 'N/A_ADMINIS2' AS FS_Number
UNION
SELECT 6 AS ID, 934895 AS FS_Number1, 'N/A_ADMINIS2' AS FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, Null AS FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, 'N/A_3' AS FS_Number
UNION
SELECT 9 AS ID, 3451124 AS FS_Number1, 'N/A_1' AS FS_Number
看起来像这样:
ID FS_Number1 FS_Number
1 214565 NULL
2 NULL 759843
3 NULL 243545
4 NULL 655342
5 897324 N/A_ADMINIS2
6 934895 N/A_ADMINIS2
7 3453 NULL
8 85634542 N/A_3
9 3451124 N/A_1
结果应如下所示:
SELECT 1 AS ID, 214565 AS FS_Number1, '214565' AS FS_Number
UNION
SELECT 2 AS ID, null AS FS_Number1, '759843' AS FS_Number
UNION
SELECT 3 AS ID, null AS FS_Number1, '243545' AS FS_Number
UNION
SELECT 4 AS ID, null AS FS_Number1, '655342' AS FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, '897324' AS FS_Number
UNION
SELECT 6 AS ID, 934895 AS FS_Number1, '934895' AS FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, '3453' AS FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, '85634542' AS FS_Number
UNION
SELECT 9 AS ID, 3451124 AS FS_Number1, '3451124' AS FS_Number
看起来像这样:
ID FS_Number1 FS_Number
1 214565 214565
2 NULL 759843
3 NULL 243545
4 NULL 655342
5 897324 897324
6 934895 934895
7 3453 3453
8 85634542 85634542
9 3451124 3451124
我知道您可以用 COALESCE 替换 NULL 值,但就我而言,我还有需要用数字替换的文本。
最好的方法是什么?
你可以用 try_convert()
:
select id, fs_number1,
case when try_convert(int, fs_number) is null
then fs_number1
else fs_number
end as fs_number
from mytable
想法是尝试将值转换为数字。如果转换尝试 returns null
,则意味着该字符串不是数字,或者是 null
:在这种情况下,我们使用替代值。
id | fs_number1 | fs_number
-: | ---------: | --------:
1 | 214565 | 214565
2 | null | 759843
3 | null | 243545
4 | null | 655342
5 | 897324 | 897324
6 | 934895 | 934895
7 | 3453 | 3453
8 | 85634542 | 85634542
9 | 3451124 | 3451124
这类似于 GMB 的版本,但使用合并而不是大小写。
select id, fs_number1,
coalesce(try_convert(int, fs_number), fs_number1) as fs_number
from mytable
我有以下情况(请 运行 虚拟数据集),其中 FS_Number 有真实的 FS_Numbers,NULL 和随机文本,例如 N/A_ADMINIS2 这需要用 FS_Number1
中的值替换SELECT 1 AS ID, 214565 AS FS_Number1, Null AS FS_Number
UNION
SELECT 2 AS ID, null AS FS_Number1, '759843' AS FS_Number
UNION
SELECT 3 AS ID, null AS FS_Number1, '243545' AS FS_Number
UNION
SELECT 4 AS ID, null AS FS_Number1, '655342' AS FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, 'N/A_ADMINIS2' AS FS_Number
UNION
SELECT 6 AS ID, 934895 AS FS_Number1, 'N/A_ADMINIS2' AS FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, Null AS FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, 'N/A_3' AS FS_Number
UNION
SELECT 9 AS ID, 3451124 AS FS_Number1, 'N/A_1' AS FS_Number
看起来像这样:
ID FS_Number1 FS_Number
1 214565 NULL
2 NULL 759843
3 NULL 243545
4 NULL 655342
5 897324 N/A_ADMINIS2
6 934895 N/A_ADMINIS2
7 3453 NULL
8 85634542 N/A_3
9 3451124 N/A_1
结果应如下所示:
SELECT 1 AS ID, 214565 AS FS_Number1, '214565' AS FS_Number
UNION
SELECT 2 AS ID, null AS FS_Number1, '759843' AS FS_Number
UNION
SELECT 3 AS ID, null AS FS_Number1, '243545' AS FS_Number
UNION
SELECT 4 AS ID, null AS FS_Number1, '655342' AS FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, '897324' AS FS_Number
UNION
SELECT 6 AS ID, 934895 AS FS_Number1, '934895' AS FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, '3453' AS FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, '85634542' AS FS_Number
UNION
SELECT 9 AS ID, 3451124 AS FS_Number1, '3451124' AS FS_Number
看起来像这样:
ID FS_Number1 FS_Number
1 214565 214565
2 NULL 759843
3 NULL 243545
4 NULL 655342
5 897324 897324
6 934895 934895
7 3453 3453
8 85634542 85634542
9 3451124 3451124
我知道您可以用 COALESCE 替换 NULL 值,但就我而言,我还有需要用数字替换的文本。 最好的方法是什么?
你可以用 try_convert()
:
select id, fs_number1,
case when try_convert(int, fs_number) is null
then fs_number1
else fs_number
end as fs_number
from mytable
想法是尝试将值转换为数字。如果转换尝试 returns null
,则意味着该字符串不是数字,或者是 null
:在这种情况下,我们使用替代值。
id | fs_number1 | fs_number -: | ---------: | --------: 1 | 214565 | 214565 2 | null | 759843 3 | null | 243545 4 | null | 655342 5 | 897324 | 897324 6 | 934895 | 934895 7 | 3453 | 3453 8 | 85634542 | 85634542 9 | 3451124 | 3451124
这类似于 GMB 的版本,但使用合并而不是大小写。
select id, fs_number1,
coalesce(try_convert(int, fs_number), fs_number1) as fs_number
from mytable