如何在 SQL 中将 null(数字)替换为“未知”(字符)?

Posted

技术标签:

【中文标题】如何在 SQL 中将 null(数字)替换为“未知”(字符)?【英文标题】:how to replace null (number) to 'unknown' (char) in SQL? 【发布时间】:2020-10-03 09:14:38 【问题描述】:

如何在 SQL 中将 Grade1 中的所有空值替换为“未知”? 这不起作用,因为 Grade1 是数字,但“未知”是字符。

SELECT NVL(Grade1, 'Unknown')
FROM table;

[表格]

Student   Grade1  Grade2
1          NULL     0.88
2          0.80     0.50
3          NULL     0.40

【问题讨论】:

由于您使用的是nvl,我假设您使用的是Oracle而不是其他一些关系数据库。 【参考方案1】:

你不能随心所欲。 NVL() 的两个分支必须返回相同的数据类型。如果您真的想要 NULL 值的“未知”,那么您还必须将非 NULL 值转换为字符串。

假设您正在运行 Oracle,正如 NVL() 建议的那样:

NVL(TO_CHAR(grade1), 'Unknown')

也就是说,我宁愿保持 NULL 的值不变。这似乎是表示数据缺失的正确方式(NULL 真正代表“未知”)。

【讨论】:

【参考方案2】:

假设您的意图是让结果中的Grade1 列成为varchar2

coalesce( to_char( Grade1 ), 'Unknown' )

您可以使用nvl 而不是coalesce,但coalese 更灵活(它可以接受两个以上的参数)并且更易于跨不同数据库移植。

【讨论】:

【参考方案3】:

你可以试试这个:

SELECT DECODE(Grade1, null, 'UnKnown', Grade1) FROM tbl;

【讨论】:

以上是关于如何在 SQL 中将 null(数字)替换为“未知”(字符)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 hive 中将列的空白值替换为 [null] 以计算 SUM

如何在未知大小的二进制数中将所有位设置为“1”?

如何在ssis中将空白转换为null

如何在 SQL Server Management Studio 中将列值设置为 NULL?

如何在 SQL 中将数字转换为日期时间

如何在ssis中将空白转换为null