比较字符串值内的整数

问题描述:

我有一些字符串值存储在数据库表中的14英寸,14.8英寸,15.1英寸,15.6英寸,16英寸等笔记本电脑的屏幕尺寸。利用使用值的范围像一个高级搜索选项正在搜索这些值:比较字符串值内的整数

less than 14 inches 
14-15 inches 
15-16 inches 
16-18 inches 

如何使用上面的搜索条件来从数据库中获取的值,以显示我躺在内的所有屏幕尺寸范围:

15-16 inches 

返回应该是所有记录15.1英寸的结果,15.6英寸

我一直在使用比较操作,但正确的结果没有显示尝试。它显示起始值或结束值。不在范围之间的人。

+1

您需要将字符串中的数字进行正则表达式化,然后进行比较。 – Fluffeh 2012-08-09 12:41:01

+0

或者您可以将单元存储在单独的列中。通过这种方式,您可以通过参考单位来计算它们的长度,而不是单位不可知的值来进行真正的比较。 – Matt 2012-08-09 12:43:08

+0

您的值是作为字符串存储在数据库中还是浮点? – 2012-08-09 12:43:29

比方说14,15,16,18是你的4个选项和$ myvalue的是要他们

尝试比较值:

$range = array(14, 15, 16, 18); 
foreach ($range as $key => $val) 
{ 
    // first option 
    if ($myValue <$range[0]) 
     $option = 1; 

    // last option 
    else if($myValue > $range[count($range)) 
     $option = count($range)+1; 

    // other options 
    else if($myValue < $val && $myValue > $range[$key-1]) 
     $option = $key+1; 
} 

$str = '15-16 inches'; 
preg_match_all('!\d+!', $str, $matches); 

$matches将返回为使用以下格式的数组:

array (
    0 => 
    array (
    0 => '15', 
    1 => '16', 
), 
) 

由此,您可以将数据库结果与$matches[0][0]$matches[0][1]

+0

'sscanf($ str,'%d-%d inches',$ from,$ to);' - http://de.php.net/sscanf - 直接给你整数。并且它更清楚它的作用;) – hakre 2012-08-09 13:10:31

在MySQL中,你可以使用BETWEEN comparison operator为:

SELECT * FROM test.inches WHERE text BETWEEN 15 AND 16; 

要从范围内得到的所有条目。 BETWEEN也会将字符串转换为数字。

3 15.1 inches 15.1 
4 15.6 inches 15.6 
5 16 inches 16 

或者到BETWEEN你可以制定两个标准,并告诉双方都需要进行匹配(AND):

SELECT * FROM test.inches WHERE text >= 15 AND text < 16; 
           `-- #1 --´ + `-- #2 -´ 

这给了你那么:

3 15.1 inches 15.1 
4 15.6 inches 15.6 

我希望这有助于。


关于转换(将字符串转换为数字在这里):在MySQL(至少我在这里使用的版本,但是这是常见的),你可以将字符串转换为一个数字,然后数值加0比较反对。演示:

SELECT "15.1 inches" + 0 AS inches; 

返回单行数;:

15.1 

同样可以查询数据库时做到:

SELECT * FROM inches WHERE text + 0 BETWEEN 14 AND 15; 

小心你最初应该将数字作为数字存储到数据库中。所以,你可以引入一个新列并转换现有的日期:

ALTER TABLE `test`.`inches` ADD COLUMN `number` FLOAT NULL AFTER `text` ; 
UPDATE inches SET number = text + 0; 

然后,您可以直接查询从那里没有做转换所有的时间:

SELECT * FROM inches WHERE number BETWEEN 14 AND 15; 

这将允许您创建和索引并且如果有必要,真的可以在未来加快搜索速度。但在此之前,您已经将数据标准化了一些。