查询包含带有between语句的数字的sql列varchar6

gcmastyq  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(352)

该表有一个varchar6类型的列,其中包含6个介于000000到999999之间的数字,或者为空。无论您为seq列的各个变量提供什么值,它都不会返回任何结果,但不会返回语法错误。如果使用两个varchar6进行中间操作,我怀疑您在sql中找不到任何东西。
sql查询为;

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

这感觉像是一个设计缺陷,因为存储和比较数字可能不应该使用varchar6,但不幸的是,更改表的设计是不可能的。
如何更改此sql,使其能够正确比较?

vshtjzan

vshtjzan1#

你的代码应该有用。我怀疑你对数据有问题。您可以查看:

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

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

0tdrvxhp

0tdrvxhp2#

你说字符串是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 <> ''

相关问题