【发布时间】:2016-10-10 15:38:15
【问题描述】:
我正在处理一个 SQL 查询,我需要根据 ISNUMERIC 返回值进行过滤。 ISNUMERIC 很重要,因为在我的联接中,我将值隐式转换为“int”,因此 VARCHAR 是禁忌。
我查看了应该处理查询的顺序,处理 FROM,然后处理 WHERE 之前的 ON。有没有一种方法可以建议在不使用子查询的情况下首先评估 ISNUMERIC?我不反对子查询,我只是想知道。
SELECT l.* FROM [dbo].[CRM_SD_Working_1] l
LEFT JOIN [dbo].[CRM_SD_Working_1] r ON l.[PlzVon] = r.[PlzBis] + 1
WHERE
ISNUMERIC(l.[PlzVon]) = 1
AND ISNUMERIC(l.[PlzBis]) = 1
AND l.PlzVon <> l.PlzBis
AND r.ID IS NULL
【问题讨论】:
-
该子句不应该是
ISNUMERIC(r.[PlzBiz] = 1吗?用 r。而不是 l.? -
在 = 符号两侧的 JOIN 中加入 CASE 语句以测试 IsNumberic()。
-
PlzVon或PlzBis栏目中是否有类似'$5.1', '1.4e1','4d9'的数据? -
甚至不确定您是否可以使用子查询来做到这一点。查询优化器选择处理顺序。 #temp 表应该可以工作。
标签: sql-server tsql ansi-sql