SQL:在LIKE之前使用equals进行选择

SQL:在LIKE之前使用equals进行选择,sql,sqlite,select,Sql,Sqlite,Select,我需要在SQLite数据库中查询与给定字符串匹配的项,或者类似于query%的项。然而,这并不像你想象的那么简单 SELECT id, type, number FROM roads WHERE number = '12' OR number LIKE '12%' 我需要所有相等的匹配项出现在匹配项之前,如匹配项。我想象有一个在那里的某个地方,并按它排序,但我不确定它会如何工作。如果可能的话,我想避免进行两次查询。我不确定Sqlite是否支持这种语法,但有一个想法: SELECT id, ty

我需要在SQLite数据库中查询与给定字符串匹配的项,或者类似于
query%
的项。然而,这并不像你想象的那么简单

SELECT id, type, number FROM roads WHERE number = '12' OR number LIKE '12%'

我需要所有相等的匹配项出现在
匹配项之前,如
匹配项。我想象有一个
在那里的某个地方,并按它排序,但我不确定它会如何工作。如果可能的话,我想避免进行两次查询。

我不确定Sqlite是否支持这种语法,但有一个想法:

SELECT id, type, number FROM roads WHERE number LIKE '12%'
ORDER BY
   CASE
      WHEN number = '12' THEN 0
      ELSE 1
   END

如果它们总是同一个字符串,你能不能按长度(数字)进行排序?
?啊,这可能行得通,是吗?它并不总是相同的字符串,但我会忽略
=
条件。然后我会将您的示例更改为
其中的数字='114'或类似'12%'
,以使其更具挑战性(编辑:cade的解决方案仍然有效)哦,我不太明白。是的,答案总是一样的。这看起来像答案,我会试试。我编辑了你的答案以删除不必要的条件。你一定是急着回答:)使用这种方法有什么好处?对规范的另一种解释是,“所有相同的匹配都在
相似的
匹配之前出现”,意思是,“只有在没有相同匹配的情况下才能获得我的
相似的
匹配。”这样做的好处是,获得的数据越少,目标也越多,当然,只有在满足要求的情况下。
SELECT id, type, number
FROM roads 
WHERE number = '12' OR number LIKE '12%'
ORDER BY CASE WHEN number = '12' THEN 0 ELSE 1 END, number
SELECT id, type, number 
   FROM roads 
  WHERE number = '12' 
UNION
SELECT id, type, number 
   FROM roads 
  WHERE number LIKE '12%'
        AND NOT EXISTS ( SELECT id, type, number 
                           FROM roads 
                          WHERE number = '12' );