You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将datetime转为date时遇Msg206类型冲突错误,求SQL解决方法

解决SQL中操作数类型冲突(int与date不兼容)的问题

首先,咱们来拆解这个Msg 206错误的核心原因:CASE表达式的所有分支必须返回兼容的数据类型,你的原写法里,嵌套子查询的类型推断出现了问题,导致SQL Server无法确定CASE的统一返回类型,进而抛出了int与date不兼容的错误。另外,你在子查询里重复判断t0.InvType是冗余的,还可能干扰类型推断。

修正方案1:改用LEFT JOIN关联表(更高效清晰)

这种方式避免了嵌套子查询的类型不确定性,同时让逻辑更易读:

SELECT 
    CASE 
        WHEN t0.InvType = 13 THEN CAST(oinv.DocDate AS DATE)
        WHEN t0.InvType = 18 THEN CAST(opch.DocDate AS DATE)
        WHEN t0.InvType = 19 THEN CAST(orpc.DocDate AS DATE)
        WHEN t0.InvType = 204 THEN CAST(your_table_204.DocDate AS DATE) -- 替换为204对应的表名
        ELSE NULL -- 明确ELSE分支,确保类型统一
    END AS ConvertedDocDate
FROM 
    你的主表名 t0 -- 替换成你的实际主表名称
LEFT JOIN 
    OINV oinv ON t0.DocEntry = oinv.DocEntry AND t0.InvType = 13
LEFT JOIN 
    OPCH opch ON t0.DocEntry = opch.DocEntry AND t0.InvType = 18
LEFT JOIN 
    ORPC orpc ON t0.DocEntry = orpc.DocEntry AND t0.InvType = 19
LEFT JOIN 
    your_table_204 ON t0.DocEntry = your_table_204.DocEntry AND t0.InvType = 204 -- 补充204对应的关联

修正方案2:优化原有的CASE子查询写法

如果你更倾向于保留子查询的方式,需要确保每个分支的子查询只返回单行,并且统一返回类型:

SELECT 
    CASE 
        WHEN t0.InvType = 13 THEN (SELECT CAST(DocDate AS DATE) FROM OINV WHERE DocEntry = t0.DocEntry)
        WHEN t0.InvType = 18 THEN (SELECT CAST(DocDate AS DATE) FROM OPCH WHERE DocEntry = t0.DocEntry)
        WHEN t0.InvType = 19 THEN (SELECT CAST(DocDate AS DATE) FROM ORPC WHERE DocEntry = t0.DocEntry)
        WHEN t0.InvType = 204 THEN (SELECT CAST(DocDate AS DATE) FROM your_table_204 WHERE DocEntry = t0.DocEntry)
        ELSE NULL -- 必须加上ELSE,确保所有分支返回类型一致
    END AS ConvertedDocDate
FROM 
    你的主表名 t0

关键注意点

  1. 类型统一:CASE的所有分支(包括ELSE)必须返回相同或兼容的类型,这里我们统一返回DATE或NULL(NULL会继承DATE的类型)。
  2. 避免冗余判断:原写法里子查询重复判断t0.InvType,CASE已经做了这个判断,子查询只需要匹配DocEntry即可,减少不必要的计算。
  3. 类型匹配:如果t0.InvType是INT类型,就用数字(比如13)而不是字符串('13')进行比较,避免隐式转换带来的潜在问题。

内容的提问来源于stack exchange,提问作者shiela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:02:42