Shm*_*nix 2 sql sql-server sql-server-2005
我有一个查询,我正在尝试检查scode列中的一系列代码.问题是scode列包含一些nvarchar字符,并在找到它们时出错.
如何在不返回错误的情况下运行以下查询.
SELECT dtExpires, dtFirst
FROM Customers
WHERE (scode BETWEEN 10 AND 100) OR
(scode BETWEEN 500 AND 600)
Run Code Online (Sandbox Code Playgroud)
我收到的错误:
将nvarchar值转换为数据类型int时转换失败
如果你不能修复数据类型,这真的是你应该做的......
唯一可靠的短路方法是将过滤后的结果填充到#temp表中.否则,您无法控制评估顺序.即使您使用子查询或CTE来过滤ISNUMERIC() = 1"first"的行,SQL Server也可能BETWEEN首先评估条件,但仍然会失败并出现相同的错误.这可能并不总是发生,但这是保证避免它的唯一方法:
SELECT dtExpires, dtFirst, scode
INTO #t
FROM dbo.Customers
WHERE scode NOT LIKE '%[^0-9]%'; -- this assumes no decimals allowed
SELECT dtExpires, dtFirst
FROM #t
WHERE (scode BETWEEN 10 AND 100)
OR (scode BETWEEN 500 AND 600);
DROP TABLE #t;
Run Code Online (Sandbox Code Playgroud)