当值在范围内时选择行

时间:2016-04-25 14:41:45

标签: sql sql-server tsql

如果我的过滤器是111,如果下面的两列如何选择行110-118? 100-118是因此111落在100-118之间的范围

onItemRendered: function(args){
    if(args.itemData.isSelected) {
      args.itemElement.css("color", "green");
    }
}

3 个答案:

答案 0 :(得分:2)

下面是一个简单的示例,说明如何使用子查询在SQL中执行此操作以获取开始和结束范围。这可以扩展为更好地处理解析字符串值。

Declare @Temp TABLE
(
Dest_Zip varchar(7),
Ground varchar(3)
)

INSERT INTO @Temp VALUES ('004-005','003')
INSERT INTO @Temp VALUES ('068-089','002')
INSERT INTO @Temp VALUES ('100-118','001')

SELECT A.Dest_Zip, A.Ground FROM
(
select 
Convert(int, SUBSTRING(Dest_Zip,1,3)) StartNum,
Convert(int, SUBSTRING(Dest_Zip,5,3)) EndNum,
*
from @Temp
) AS A

WHERE 111 >= A.StartNum AND 111 <= A.EndNum

答案 1 :(得分:0)

修复数据。这是一种使用计算列的简单方法(假设&#34;拉链&#34;总是3个字符):

alter table t
    add column minzip as (left(dest_zip), 3),
    add column maxzip as (right(dest_zip), 3);

然后,您可以将查询运行为:

select t.*
from t
where '111' between t.minzip and t.maxzip;

您甚至可以在计算列上创建索引,这可以帮助提高性能(尽管在这种情况下并不多)。

答案 2 :(得分:0)

如果你想在php中进行检查,也许这个示例代码可以帮助你:

<?php 

$my_string = "111";

$foo = "100-118";  // our range

$bar = explode('-', $foo);  // Get an array .. let's call it $bar
// Print the output, see how the array looks
//print_r($bar);
//echo $bar[0].'<br />';  
//echo $bar[1].'<br />';

if(($bar[0] <= $my_string ) AND ($bar[1] >= $my_string)){ echo 'true';} else { echo 'false';}

?>