我有一个简单的表格"本地化",有两个字段(城市,街道)。
我只想获得一列"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。
使用LOCATE
和SUBSTRING
。请参阅 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%');
另外,不要混合使用反引号,要么在所有事情上使用它们,要么根本不使用它们(我更喜欢前者)。