SQL - 返回1到1.99的数字范围

时间:2013-07-11 16:43:59

标签: sql sql-server-2008

例如:

700表示700.00 - 700.99

400.1表示400.10 - 400.19

目前我有这样的事情:

Select codes 
From code_table
where codes in ('700', '400.1')

这不起作用,因为它只是寻找700和400.1,所以我尝试了:

Select codes 
From code_table
where left (codes, 3) = '700'

哪个有效,但问题是我正在寻找的初始数字集不仅仅是这里的2,还有一种更简单的方法可以做到这一点,而不必为每一个做这个吗?我认为between子句也可以工作,但每个都需要代码吗?

5 个答案:

答案 0 :(得分:1)

如果我已正确理解您的注释,则需要在与varchar()值进行比较时显式构建正则表达式,或者使用带有BETWEEN运算符的字符串。

所以,这个。 。

select * 
from code_table
where codes = '700' 
   or codes like '700.[1-9]' 
   or codes like '700.[1-9][0-9]';

或者这个。

select * 
from code_table
where codes between '700' and '700.99'

第二个更简单。这两个查询都会排除值'700.999',我相信要排除。

使用数字而不是varchar()值,强制转换为十进制。 (浮动。)

select * 
from code_table
where cast(codes as decimal(10, 3)) between 700 and 700.99;

无论如何,您的SQL必须知道代码的结构。如果我在你的位置,我只是明确地通过了范围。这样,完整的责任在于前端代码,所以不应该有任何意外。

答案 1 :(得分:0)

您可以转换为数字并根据您的范围进行测试,例如

Select codes 
From code_table
where cast (codes as float) >= 700 and
      cast (codes as float) < 700.1

答案 2 :(得分:0)

FLOOR()

SELECT codes FROM code_table WHERE FLOOR(codes) IN (..., ..., ...)

但是你需要小数。那简单地说:

SELECT codes FROM code_table WHERE codes LIKE '700.%' OR codes LIKE '400.1%'

这是标准SQL。对于更智能的解决方案,我要选择(... AS float),但代码往往会随着时间的推移而变得更加复杂,例如700.1.10700.19b。所以我可能会创建一个存储过程。

答案 3 :(得分:0)

因为你实际上正在使用文本和文本前缀(不幸的是,它看起来像数字并且导致混淆)

SELECT代码FROM code_table WHERE代码LIKE'700'+'%'

SELECT代码FROM code_table WHERE代码LIKE'400.1'+'%'

答案 4 :(得分:0)

您可以尝试以下内容:

select * 
from code_table
where codes like '700.__' or codes like '400.1_'

或者确保只采用数值:

select * 
from code_table
where (codes like '700.__' or codes like '400.1_') and isnumeric(codes) = 1