PHP strstr equivalent in MySQL


PHP strstr equivalent in MySQL

我有一个简单的表格"本地化",有两个字段(城市,街道)。

我只想获得一列"place",但我在 MySQL 中找不到等效的 strstr。

我的查询应该执行以下操作:

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

当然stristr($city,"地球")是PHP的惯例,但我写这篇文章是为了解释问题是什么。

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

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

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

尝试上面的查询。

正如快速谷歌搜索所发现的那样:

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%');

编辑:重读你的问题,你的测试是否地球存在于城市中,使用条件,所以你并没有真正使用stristr来表达它的意图。

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

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


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

片段:

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

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