首页 > 解决方案 > 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

标签: phpsqlsql-server

解决方案


这段代码应该做你想做的事:

SELECT *
FROM <table>
WHERE location BETWEEN 'LOC:05-04-01' AND 'LOC:05-04-20'
ORDER BY location DESC;

您正在进行字符串比较,并且值比较为字符串。

您应该使用对数据库的直接查询来测试它。如果这不起作用,那么您可能会在列中包含您不期望的数据——比如连字符实际上是一个不同的字符。

如果 PHP 代码不起作用,则说明该级别出现问题。您的查询可能有错误(例如连接到错误的数据库)。你的常量中可能有坏字符。


推荐阅读