使用 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]%';
当您发现数据有问题时,您可以解决问题。您还将了解为什么不应该将数字存储在字符串中。
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]%';
当您发现数据有问题时,您可以解决问题。您还将了解为什么不应该将数字存储在字符串中。