我有一个拥有大量城市的数据库和两个名称相似的城市。
荷尔斯泰因奥尔登堡和奥尔登堡(奥尔登堡)
我从网址
获得了一个城市示例网址:
www.example.com/cityname/oldenburg-in-holstein
www.example.com/cityname/oldenburg-oldenburg
SELECT city FROM citynames WHERE city LIKE '%oldenburg%';
我做这个声明我得到了奥尔登堡在荷尔斯泰因
SELECT * FROM citynames WHERE city LIKE '%oldenburg%' AND LIKE '%oldenburg%'';
我再次在荷尔斯泰因奥尔登堡,但如果我发表此声明
SELECT city FROM citynames WHERE city LIKE '%oldenburg% %oldenburg%';
声明工作!我得到奥尔登堡(奥登堡) 我的问题是,我可以使用此声明吗?
答案 0 :(得分:2)
使用
SELECT * FROM citynames WHERE city LIKE '%oldenburg%' AND LIKE '%oldenburg%'';
你问两次同样的事情:城市是否包含字符串' oldenburg'。这不是你想要的。
使用
SELECT city FROM citynames WHERE city LIKE '%oldenburg% %oldenburg%';
您正在寻找一个包含' oldenburg'之后在某个时刻出现了空白,然后又在某个时刻再次出现了“奥登堡”这个词。所以是的,这就是你想要的。你会发现奥尔登堡(奥尔登堡),而不是霍尔斯坦的奥尔登堡'
当您从城市名称的部分用-
分隔的网址中获取城市名称时,将会是:
SELECT city FROM citynames WHERE city LIKE CONCAT('%', REPLACE(url, '-', '%'), '%');
BTW:显然你使用的是不区分大小写的排序规则。否则,您必须使用LIKE '%Oldenburg% %Oldenburg%'
才能找到奥尔登堡(奥登堡)'或WHERE LOWER(city) LIKE ...
。