php - SQL 在文本和数字的混合之间选择
问题描述
不确定是否可以在 SQL 中执行此操作,但是...我很难在某些条件之间选择结果。我有一个混合了文本和数字的列。例如:LOC:05-04-01。我想在两个位置之间选择项目。例如:在 LOC:05-04-01 和 LOC:05-04-20 之间。
我试过使用标准的 BETWEEN 语句,但它返回一个空结果。
$loc1 = 'LOC:05-04-01';
$loc2 = 'LOC:05-04-20';
$sql = $dbh->prepare("SELECT * FROM table WHERE location BETWEEN ? AND ? ORDER BY location DESC");
$sql->execute([$loc1,$loc2]);
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
echo $row['ID'].': '.$row['location'].'<br>';
}
我的数据库类似于以下:
ID | Location
1 | LOC:05-04-01
2 | LOC:05-04-02
3 | LOC:05-04-05
4 | LOC:06-04-01
5 | LOC:06-04-02
6 | LOC:06-04-10
我希望看到上述查询中的位置列表,例如:
1: LOC:05-04-01
2: LOC:05-04-02
3: LOC:05-04-05
解决方案
这段代码应该做你想做的事:
SELECT *
FROM <table>
WHERE location BETWEEN 'LOC:05-04-01' AND 'LOC:05-04-20'
ORDER BY location DESC;
您正在进行字符串比较,并且值比较为字符串。
您应该使用对数据库的直接查询来测试它。如果这不起作用,那么您可能会在列中包含您不期望的数据——比如连字符实际上是一个不同的字符。
如果 PHP 代码不起作用,则说明该级别出现问题。您的查询可能有错误(例如连接到错误的数据库)。你的常量中可能有坏字符。
推荐阅读
- c#-4.0 - 在 Tfs 的测试套件中更改测试用例的结果字段
- c# - 从 WebApi 自定义方法返回 BadRequest
- php - 如何将单选按钮选择解析到数据库
- bash - 如何将一组文件名作为命令的参数传递?
- jquery - 当今天的日期通过 var 时添加类
- orm - 感觉硬生生:在 gorm 中使用连接
- java - 垃圾收集器可以清除我的部分数据吗?
- c# - 如何从 web api 返回 byte[] 并在客户端读取它
- python-3.x - 如何在 Python Discord Bot 中停止多个倒计时?
- inno-setup - ArchitecturesAllowed Inno Setup 指令是否涉及 CPU 架构或操作系统架构?