1

我有一个包含两个字段(城市、街道)的简单表“本地化”。

我只想获得一列“位置”,但在 MySQL 中找不到 strstr 等效项。

我的查询应该做这样的事情:

SELECT IF(stristr($city, 'earth'),city,street) as place 
FROM `localization` 
WHERE city LIKE ('%krak%') OR street LIKE ('%krak%');

当然stristr($city, 'earth')是 PHP 约定,但我写这个是为了解释问题所在。

我希望你知道我的意思:)

4

3 回答 3

5

在 mysql 中使用正则表达式。您的查询将是:

SELECT IF(city like '%krak%',city,street) as place 
    FROM `localization` 
    WHERE city LIKE ('%krak%') OR street LIKE ('%krak%');

试试上面的查询。

于 2013-09-25T08:36:30.857 回答
4

通过快速谷歌搜索发现:

SELECT SUBSTRING(field_name, instr(field_name, 'needle'), LENGTH(field_name)) AS result FROM table

从这里:

http://www.coolsnippets.net/browse/id/18

所以,在你的情况下:

SELECT SUBSTRING($city, instr($city, 'earth'), LENGTH($city)) AS place
FROM `localization` 
WHERE city LIKE ('%krak%') OR street LIKE ('%krak%');
于 2013-09-25T08:28:34.180 回答
2

编辑:重新阅读您的问题,使用条件测试地球是否存在于城市中,因此您并没有真正使用stristr它的预期方式。

SELECT IF(LOCATE('earth',`city`),`city`,`street`) AS `place`

LOCATE如果找不到,将返回 0。


使用LOCATESUBSTRING。请参阅MySQL 字符串函数参考。记住SUBSTRING不是 0-indexed,而是索引从 1 开始,LOCATE如果找到则返回索引 >= 1,如果未找到则返回 0。

片段:

SELECT IF(SUBSTRING(`city`,LOCATE('earth',`city`)) AS `place`
FROM `localization`
WHERE `city` LIKE ('%krak%') OR `street` LIKE ('%krak%');

另外,不要混合使用反引号,要么在所有内容上使用它们,要么根本不使用它们(我更喜欢前者)。

于 2013-09-25T08:28:35.400 回答