我收到以下错误:
Conversion failed when converting the varchar value '2010-01-10' to data type int.
在Management Studio的查询窗口中运行以下命令时:
SELECT * FROM (
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
) AS X
WHERE qqq = CAST(14290 AS INT)
但是,当我只运行查询的这一部分时,我得到的结果并没有错误:
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
与以下类似:
SELECT * FROM (
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
) AS X
发生了什么,如何在不收到错误的情况下使用where子句?
答案 0 :(得分:1)
作为视图源数据的表格很可能在'2010-01-10'
列中具有值group_id
,并且这被视图本身中的过滤器排除。
视图是由查询优化器扩展的内联构造,看起来您的查询正在将过滤器推送到过滤器发生之前。
尝试
SELECT *
FROM (SELECT CAST(CASE
WHEN group_id NOT LIKE '%[^0-9]%' THEN group_id
END AS INT) AS qqq
FROM view_jct_snapshot_group_items) AS X
WHERE qqq = 14290
答案 1 :(得分:0)
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
这需要能够将视图中的所有值强制转换为int。显然,至少有一个值不是int。尝试将WHERE子句放在派生表中,而不是在它之外。
通常,在一个字段中存储不同数据类型的数据是个坏主意。这会导致编写查询时出现许多问题,并且需要您执行大量不必要的工作(在系统性能成本范围内)以将数据转换为正确的类型。就个人而言,我会重新审视你的设计,看看为什么整数和日期存储在同一个字段中。