各位下午好。
我将用“这是一个很难问的问题”作为开头。当我认为我已经涵盖了那部分时,我遇到了转换错误。显然,我没有。
情况:其中包含 INT 数据的 VARCHAR 字段,以及一些导致转换问题的随机垃圾字符串。这是我正在尝试做的一个例子。
DECLARE @MyTABLE TABLE (
Value VARCHAR(50) NOT NULL
);
-- insert some strings
INSERT INTO @MyTABLE (Value) VALUES('400'), ('H-100'), ('H-200'), ('500'),
('600'), ('H-300');
-- conversion fails for the actual strings
SELECT *
FROM @MyTABLE m
WHERE CAST(m.Value AS INT) BETWEEN 1 AND 1000;
-- what I THOUGHT would fix it, but doesn't...
SELECT *
FROM (SELECT * FROM @MyTABLE WHERE Value NOT LIKE 'H%') X
WHERE CAST(X.Value AS INT) BETWEEN 1 AND 1000;
我意识到还有其他方法可以做到这一点,例如将所有错误数据插入临时表并进行查询,但我想知道为什么我的查询不起作用以及我可以做些什么来修复它.
编辑 - 这是针对 SQL 2008 R2
提前致谢!