【发布时间】:2022-04-04 16:28:53
【问题描述】:
为什么这不起作用?
select *
from
(
select membership_number
from members
where membership_number not like '%[^0-9]%'
) mem
where cast(membership_number as int) > 2
子查询应该过滤掉非数字的数据,外部查询将其转换为整数,以便我可以查找任何大于 2 的数据。
似乎它首先运行外部查询的 where 子句。我该如何解决这个问题?
【问题讨论】:
-
您是否自行运行内部查询以确保它返回您期望的结果?
-
太酷了。我以前从未听说过 SQL Fiddle。
-
如果您查看带有稍微修改的
WHERE的执行计划,它会在主WHERE中滚动子查询where 子句:Execution Plan 我仍在考虑如何防止这种行为。 -
请检查这个 - T-SQL 函数不暗示特定的执行顺序rusanu.com/2011/08/10/…
-
对于您的问题,您可以使用 WHERE ISNUMERIC(membership_number) = 1 AND cast(membership_number as int) > 2
标签: sql sql-server tsql