数据类型不匹配的情况



当日期为空时,我想显示"N/A",但如果日期不为空,我想以dB显示日期。这就是我目前拥有的,我在 THEN/ELSE 表达式中得到数据类型不匹配。我假设这是因为我试图在日期字段中显示一个字符。

SELECT
CASE WHEN created_at IS NULL 
THEN 'N/A' 
ELSE created_at 
END AS created_at
FROM example.example_id

这可能吗?

不能混合数据类型。

SELECT COALESCE(CAST(created_at AS VARCHAR(100)),'NA') AS created_at
FROM example.example_id

或者,如果您只关心演示,则可以调整用户首选项。 例如.SQL助手 ->选项 -> 数据格式 -> 然后将"为空数据值显示此字符串"设置为"NA"。

您也可以使用 COALESCE 代替 CASE,但您仍然需要先将日期转换为字符串:

Coalesce(To_Char(created_at, 'yyyy-mm-dd'), 'N/A')

你的假设是正确的:你不能将日期(时间)数据类型与 varchar 数据类型混合使用。解决方案是将日期转换为 varchar:

SELECT CASE WHEN created_at IS NULL THEN 'N/A' 
ELSE CAST (created_at as char(8) format 'YYYYMMDD') 
END AS created_at 
FROM example.example_id

此处的转换可能需要一些调整,具体取决于您希望它的显示方式。

简单地你可以试试

SELECT CAST(VARCHAR, ISNULL(Created_at, 'N/A'))  As 'Created_at' 
FROM example.example_id

最新更新