【发布时间】:2021-09-24 10:44:09
【问题描述】:
当我收到这个错误时,我完全糊涂了: '操作数类型冲突:int 与日期不兼容'
我有以下查询,其中出现错误:
select top 1 a.[ID], a.[DateA], a.[DateD] from view1 a where a.ID]=1
union all
(select top 1 a.[ID], a.[DateA], a.[DateD] from view2 a where a.[ID]=2 )
数据:
ID DateA DateD
1 2021-01-09 00:00:00.000 NULL
2 2006-11-27 00:00:00.000 NULL
但是,如果我更改查询,因此“DateD”列直接为空,那么它工作正常,没有错误:
select top 1 a.[ID], a.[DateA], null as [DateD] from view1 a where a.ID]=1
union all
(select top 1 a.[ID], a.[DateA], a.[DateD] from view2 a where a.[ID]=2 )
在第一个视图(引擎盖下)我有 选择 NULL 作为 [DateD] 在第二个视图(引擎盖下)我有: 选择 CAST(DateD AS DATE) AS [DateD]
有什么问题?
【问题讨论】:
-
检查您的视图,
[DateD]在第一个视图中将是int。在视图中使用CONVERT(DATE, NULL)修复它 -
UNION (ALL)中的数据集必须具有相同的定义。显然他们没有,因此错误。这表明您的“日期”列之一不是date,而是int(我认为这是一个设计缺陷)。 -
我保证
view1中没有名为ID]的列,这意味着您向我们展示的代码只能猜测 产生您所问的错误因为你从来没有运行过这段代码。我建议您花一点时间在临时数据库中创建一些模拟数据和表,直到您有一个生成错误的实际查询,然后请发布所有这些详细信息所以我们可以在本地重新创建问题。
标签: sql sql-server