我有一个问题:
$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进行测试。
答案 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)
谢谢大家!