数据类型不匹配时的情况

时间:2017-08-28 15:20:00

标签: sql casting teradata case-when

当日期为NULL时,我想显示“N / A”,但如果日期不为空,我想以dB显示日期。这就是我目前所拥有的,我在THEN / ELSE表达式中得到了一个DataType Mismatch。我假设这是因为我试图在日期字段中显示一个字符。

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

这可能吗?

4 个答案:

答案 0 :(得分:1)

您无法混合数据类型。

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

或者,如果您只关心演示文稿,则可以调整用户首选项。恩。 SQL助手 - >选项 - >数据格式 - >然后设置'显示此字符串以获取空数据值' as' NA'。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您的假设是正确的:您不能将日期(时间)数据类型与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

此处的转换可能需要进行一些调整,具体取决于您希望如何显示。

答案 3 :(得分:0)

只需你可以尝试

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