MySQL BETWEEN查询从数据库中的文本字段获取数据

时间:2013-07-11 15:33:03

标签: php mysql mysqli

我有一个问题:

$sql = "SELECT * FROM table WHERE  CONCAT(Prod, Serial) BETWEEN '$start' AND '$end'";

其中Prod和Serial作为字符串存储在MySQLi数据库中。我需要更新AA1000和AA1005之间的项目详情。当我运行此查询时,它会更新AA1000和AA1005之间的单位详情,以及“作为奖励”,AA10000和AA10050之间的所有单位。 有没有办法使用BETWEEN查询获得文本类型字段的完全匹配?

谢谢!

P.S。我知道我需要更新查询来更新细节。我正在使用SELECT进行测试。

4 个答案:

答案 0 :(得分:1)

您正在以非常糟糕的方式滥用BETWEEN语法。你正在比较字符串,所以

'AA1000' <= 'AA10000' <= 'AA1005'

实际上是正确的,因为你不是在比较数字,只是字符串。字符串比较按字符进行,不考虑长度,所以

'A' <= 'AZ' <= 'B'

也是如此,即使人类会认为“AZ”会在'B'之后出现。

答案 1 :(得分:0)

我从未亲身遇到过我需要这种情况的情况,但我相信你可以用正则表达式做到这一点。 This may help you.

答案 2 :(得分:0)

此查询应该这样做:

SELECT *
FROM TABLE
WHERE Prod = LEFT('$start', 2)
AND CAST(Serial AS DECIMAL) BETWEEN SUBSTRING('$start', 3) AND SUBSTRING('$end', 3);

您还可以在PHP中拆分开始和结束字符串:

$prod = substr($start, 0, 2);
$start_code = substr($start, 2);
$end_code = substr($end, 2);

$sql = "SELECT *
FROM TABLE
WHERE Prod = '$prod'
AND CAST(Serial AS DECIMAL) BETWEEN $start_code AND $end_code";

答案 3 :(得分:0)

到目前为止工作:

 CONVERT(SUBSTRING('$startunit', 3),UNSIGNED INTEGER) 

谢谢大家!