0

我有以下情况(请运行虚拟数据集),其中 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 值,但在我的情况下,我也有需要用数字替换的文本。做这个的最好方式是什么?

4

2 回答 2

1

你可以这样做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

这个想法是尝试将值转换为数字。如果转换尝试返回null,则表示字符串不是数字,或者null: 在这种情况下,我们使用替代值。

DB Fiddle 上的演示

编号 | fs_number1 | fs_number
-: | ---------: | --------:
 1 | 214565 | 214565
 2 |       | 759843
 3 |       | 243545
 4 |       | 655342
 5 | 897324 | 897324
 6 | 934895 | 934895
 7 | 第3453章 3453
 8 | 85634542 | 85634542
 9 | 3451124 | 3451124
于 2020-09-14T22:42:12.440 回答
0

这类似于 GMB 的版本,但使用合并而不是大小写。

select id, fs_number1,
    coalesce(try_convert(int, fs_number), fs_number1) as fs_number
from mytable
于 2020-09-15T05:29:13.713 回答