该表的列类型为varchar6,其中包含000000至999999之间的6个数字,或者为空。无论为该列SEQ赋予各种变量什么值,它都不会返回任何结果,但不会返回语法错误。我怀疑如果对两个varchar6进行一次运算,则无法在SQL中找到任何内容。
SQL查询是;
select Top 2000 A.*
from TABLE1 A
where A.SEQ between '0' and '999999'
这感觉像是设计上的缺陷,因为可能不应该使用varchar6来存储和比较数字,但是不幸的是,更改表的设计是不可能的。
如何更改此SQL以使其能够正确比较?
您说的字符串是VARCHAR(6),并且您想要选择0-999999之间的任何值,所以似乎是任何数字。
您可以选择这样的数值:
SELECT TOP 2000 *
FROM TABLE1
WHERE ISNUMERIC(SEQ) = 1
或者如果您只知道数字字符串和空格(我假设空格表示NULL或”,则可以选择这样的非空格:
SELECT TOP 2000 *
FROM TABLE1
WHERE SEQ IS NOT NULL AND SEQ <> ''
您的代码应该有效。我怀疑您的数据有问题。您可以通过以下方式进行检查:
select A.*
from TABLE1 A
where try_convert(int, A.SEQ) is null and A.SEQ is not null;
或:
select A.*
from TABLE1 A
where A.seq like '%[^0-9]%';
找到数据问题后,您可以解决问题。您还将了解为什么不应该将数字存储在字符串中。