使用 between 语句查询包含数字的 SQL 列 varchar6

Querying SQL column varchar6 containing numbers with a between statement

table 有一个类型为 varchar6 的列,其中包含 000000 到 999999 之间的 6 个数字,或者为空。 无论您为此列 SEQ 的各种变量赋予什么值,它都不会返回任何结果,但不会出现语法错误。 我怀疑你在 SQL 中找不到任何东西,如果你在两个 varchar6 之间做一个。

sql查询是;

select Top 2000 A.* 
from TABLE1 A 
where A.SEQ between '0' and '999999'

这感觉像是一个设计缺陷,因为存储和比较数字可能不应该使用 varchar6,但不幸的是,更改 table 的设计是不可能的。

如何更改此 SQL 以便它能够正确比较?

你说字符串是 VARCHAR(6) 并且你想 select 0-999999 之间的任何东西,所以这似乎是任何数字。

您可以select这样的数值:

SELECT TOP 2000 *
FROM TABLE1
WHERE ISNUMERIC(SEQ) = 1

或者如果您知道只有数字字符串和空格(我假设空格是指 NULL 或 ''),您可以 select 像这样的非空格:

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]%';

当您发现数据有问题时,您可以解决问题。您还将了解为什么不应该将数字存储在字符串中。