去除MySQL中字符串的多个前导和尾随关键字

3
我有一个数据表,类似这样的数据:
 ---------------
|town           |
 ---------------
|Longton North  |
|Longton South  |
|Longton North  |
|Longton East   |
|Longton West   |
|East Valley    |
|West Valley    |
 ---------------

我知道如何使用函数从字符串中删除前导和尾随字符。

TRIM(BOTH 'North' FROM town)

但我想从结果中去掉北、南、西、东。因此输出应该如下:

 ---------
|town     |
 ---------
|Longton  |
|Longton  |
|Longton  |
|Longton  |
|Longton  |
|Valley   |
|Valley   |
 ---------

7
提示:TRIM(TRIM(TRIM(TRIM(...))))该提示是在建议连续使用四个TRIM函数来删除字符串中不必要的空格。 - Gordon Linoff
@GordonLinoff 的工作非常出色。非常感谢您的帮助。 - GoSmash
是的,就像一个理发器 :) - Rahul
@GordonLinoff 您要回答还是我可以发布它? - GoSmash
请注意,戈登的回答可以修剪前导的南东部分,但不能修剪尾随的南东部分,或者反之(取决于修剪的顺序)。 - jarlh
1个回答

6

试试这个...这个方法对你来说肯定有效。

select 
trim(TRIM(BOTH 'South' FROM TRIM(BOTH 'North' FROM TRIM(BOTH 'East' FROM TRIM(BOTH 'West' FROM town))))) from tbl

或者更加具体
select trim(case 
when position('North' in town) > 0 then TRIM(BOTH 'North' FROM town) 
when position('South' in town) > 0 then TRIM(BOTH 'South' FROM town) 
when position('East' in town) > 0 then TRIM(BOTH 'East' FROM town) 
when position('West' in town) > 0 then TRIM(BOTH 'West' FROM town) end)
from tbl

position 检查只是额外的开销。 - David דודו Markovitz
我们也可以这样写:select trim(TRIM(BOTH 'South' FROM TRIM(BOTH 'North' FROM TRIM(BOTH 'East' FROM TRIM(BOTH 'West' FROM town))))) from tb - Rushabh Master
这将是一个更好的答案。 - David דודו Markovitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接