【问题标题】:INSERT Failed. 3800: Datatype Mismatch in THEN/ELSE expression插入失败。 3800:THEN/ELSE 表达式中的数据类型不匹配
【发布时间】:2021-03-25 06:37:56
【问题描述】:

插入失败。 3800:THEN/ELSE 表达式中的数据类型不匹配。我在 SQL tera 数据中遇到了这个错误

【问题讨论】:

  • case 表达式的所有返回值必须具有兼容的数据类型。
  • insert into dp_stg2.UnitMeasure_production 当 UnitMeasureCode='NULL' 然后 'n/a' else cast(UnitMeasureCode as char(3) ) 以 UnitMeasureCode 结尾,当 Name='NULL' 时选择不同的情况'n/a' else cast (name as varchar(50)) end as Name, case when ModifiedDate='NULL' then 'n/a' else cast (ModifiedDate as date format'yyyy-mm-dd') end as ModifiedDate来自 dp_stg1.UnitMeasure_Production;
  • 这是代码
  • 嘿,改为编辑您的问题。
  • 你不应该存储字符串'NULL',存储NULL,你可以存储COALESCE(UnitMeasureCode, 'N/A')。 (如果 UnitMeasureCode 是字符列。)

标签: sql case teradatasql


【解决方案1】:

您的最后一个 case 表达式存在问题,两个值(thenelse)必须是相同的数据类型:

case
  when ModifiedDate='NULL' 
  then 'n/a' -- this is char
  else cast (ModifiedDate as date format'yyyy-mm-dd') -- this is date
end as ModifiedDate

您应该考虑将 n/a 替换为某个有效日期或 null。

【讨论】:

  • 你能举个例子吗
  • 喜欢当前日期或 null 或根据您的业务要求,但不是字符值 'n/a'
  • 我可以把 getdate() 放进去吗
  • 可以使用 current_date 或 null
猜你喜欢
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
相关资源
最近更新 更多