3

例如:

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 子句也可以工作,但每个都需要代码?

4

5 回答 5

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 都必须了解代码的结构。如果我处于你的位置,我会明确地通过范围。这样一来,所有的责任都在前端代码,所以不应该有任何意外。

于 2013-07-11T18:08:29.453 回答
0

楼层()

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。所以我可能会创建一个存储过程。

于 2013-07-11T16:55:39.207 回答
0

由于您实际上正在使用文本和文本前缀(不幸的是,它们恰好看起来像数字并导致混淆)

从 code_table 选择代码 WHERE 代码 LIKE '700'+'%'

从 code_table 选择代码 WHERE 代码 LIKE '400.1'+'%'

于 2013-07-11T17:00:11.033 回答
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
于 2013-07-11T17:10:19.000 回答
0

您可以转换为一个数字并针对您的范围进行测试,例如

Select codes 
From code_table
where cast (codes as float) >= 700 and
      cast (codes as float) < 700.1
于 2013-07-11T16:47:04.610 回答