查询SQL列varchar6包含带中间语句的数字

问题描述 投票:1回答:2

该表的列类型为varchar6,其中包含000000至999999之间的6个数字,或者为空。无论为该列SEQ赋予各种变量什么值,它都不会返回任何结果,但不会返回语法错误。我怀疑如果对两个varchar6进行一次运算,则无法在SQL中找到任何内容。

SQL查询是;

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

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

如何更改此SQL以使其能够正确比较?

sql select syntax varchar between
2个回答
0
投票

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

0
投票

您的代码应该有效。我怀疑您的数据有问题。您可以通过以下方式进行检查:

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

找到数据问题后,您可以解决问题。您还将了解为什么不应该将数字存储在字符串中。

© www.soinside.com 2019 - 2024. All rights reserved.