MySql搜索整数范围从带有破折号的数字

时间:2017-07-12 10:21:40

标签: mysql sql

我有桌子,因为我有一个带破折号值的字段。像...

enter image description here

我需要在条件之间进行搜索。

例如,如果我有一个值25,那么我需要搜索包含值25的记录,如20-31。在上面的图像中有6个记录,其中包括25个值。所以它应该返回6条记录。

请在此查询中帮助我?对此有什么疑问?

5 个答案:

答案 0 :(得分:4)

您可以使用MySQL的substring_index()功能轻松获取短划线之前和之后的数据:

select substring_index(yourcolumn,'-',1) as `lower`, substring_index(yourcolumn,'-',-1) as `upper`
from yourtable

这样,您可以返回特定值介于以下范围内的记录:

select * from yourtable
where 25 between substring_index(yourcolumn,'-',1) + 0 and substring_index(yourcolumn,'-',-1) + 0

+ 0迫使MySQL在比较前将substring_index()的结果转换为数值。

答案 1 :(得分:1)

您可以使用SUBSTRING_INDEX使用以下解决方案:

SELECT * 
FROM table_name 
WHERE 25 >= CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 1), '-', -1), UNSIGNED INTEGER)
  AND 25 <= CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 2), '-', -1), UNSIGNED INTEGER)

-- or

SELECT *
FROM table_name
WHERE 25 BETWEEN CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 1), '-', -1), UNSIGNED INTEGER)
             AND CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 2), '-', -1), UNSIGNED INTEGER)
  

演示: http://sqlfiddle.com/#!9/4ac7b3/3/0

我建议你改变你的桌面设计。我会使用VARCHAR数据类型使用INTEGER数据类型将列拆分为两列。您可以使用以下ALTER TABLE命令添加两个新列:

ALTER TABLE table_name ADD colNameA INT;
ALTER TABLE table_name ADD colNameB INT;

要拆分当前列的值并将值更新为新列,可以使用以下UPDATE命令:

UPDATE table_name SET
    colNameA = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 1), '-', -1), UNSIGNED INTEGER),
    colNameB = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, '-', 2), '-', -1), UNSIGNED INTEGER)

最后,您可以使用此VARCHAR命令删除ALTER TABLE列:

ALTER TABLE table_name DROP COLUMN col_name

现在,您可以使用以下(简单)查询来获得预期结果:

SELECT * 
FROM table_name 
WHERE 25 >= colNameA AND 25 <= colNameB

-- or

SELECT *
FROM table_name
WHERE 25 BETWEEN colNameA AND colNameB

答案 2 :(得分:0)

如果要获取介于 35 39 之间的值,则可以使用以下查询,

SELECT 
    *
FROM
    yourtable
WHERE
    35 && 39 
    BETWEEN SUBSTRING_INDEX(tablecolumn, '-', 1) + 0 AND 
SUBSTRING_INDEX(tablecolumn, '-', - 1) + 0

答案 3 :(得分:-2)

我不知道如何使用MySQL

但是使用php可以检查范围。

例如

// First of all get all record from database.
$search = 10; // Your searching value.
// Loop all rows.
while($rows = mysqli_fetch_array($r)){
    $explode = explode("-",$rows['dash']); // For get from-to value.
    $range = isset($explode[0])&&isset($explode[1])?range($explode[0],($explode[1]-1)):array(); // For get range.
    if(in_array($search,$range)){ // For check searching value is exist or not !
        echo "Yes ! I get into ".$rows['dash']; // Do stuff.
    }
}
  

注意:如果是10-15则会检查10,11,12,13,14。

答案 4 :(得分:-2)

根据我的意见,如果您不想更改表格结构,那么

根据您的其他条件获取记录,然后从该数据中使用foreach循环检查该字段之间的数量并爆炸。像

如果你有$ data作为所有数据

foreach($data as $value){
     $new_val=explode(',',$value['new_field']);
     if(25 >= $new_val[0] && 25 <= $new_val[1]){
          // here create new array
     }
}