如果字符串包含某些单词或字符,我想修剪它。这只是大型存储过程的一部分。
我想要 ifv_selection_name
包含任何这些字符 .eg:' (RES)'
或' (R)'
删除这些字符。
例如 :
`Micheal Jackson (RES)` => SHOULD BE => `Micheal Jackson`
我目前这样做的方式是这样的,它正在工作:
if v_sport_id IN (1, 121225) then
-- remove word reserved from selection name to make match possible
SELECT TRIM(TRAILING ' (NEEDS SUPPLEMENTING)' FROM v_selection_name) INTO v_selection_name;
SELECT TRIM(TRAILING ' (RES)' FROM v_selection_name) INTO v_selection_name;
SELECT TRIM(TRAILING ' (R)' FROM v_selection_name) INTO v_selection_name;
SELECT TRIM(TRAILING ' N/R' FROM v_selection_name) INTO v_selection_name;
SELECT TRIM(TRAILING ' %' FROM v_selection_name) INTO v_selection_name;
end if;
有没有其他更好的方法来做到这一点?
该字符串将只包含一个要修剪的子字符串。
字段/变量值中是否仅包含一个要修剪的子字符串?或者有像'something (R) (RES)' 这样的值必须修剪两次?
使用块
REPLACE
内的命令替换多个子字符串相当容易。CASE
我在 MySQL 5.6 上成功测试了以下命令:
无耻的插件:我在多个数据库中测试了这个命令,并在我的博客上发布了它:如何用 SQL 替换多个子字符串。
你告诉只有一个松弛必须修整。因此,值表和 slacks 表由 slack 存在连接。只有一条来自 slacks 的记录可以匹配任何值记录。因此,其中存在的值和松弛出现在一个组合记录中,并执行修整。但是,当值没有松弛时,这是可能的。在这种情况下,修剪会给
NULL
. 包装COALESCE()
将这个 null 替换为原始值。就这样。您可以创建一个包含要搜索的值的表 (t_replace)。它可以只包含一列(我们可以称之为“replace_val”)
在您的 SP 中,您可以执行以下操作:
请先在测试版本上进行测试!我希望这个对你有用。