S.S*_*.S. 3 sql trim data-manipulation amazon-redshift
这是与此处相同的问题,但那里的答案非常特定于 PHP(并且我使用的是 Redshift SQL,而不是 PHP)。
我正在尝试从字符串中删除特定的后缀。我尝试使用RTRIM,但这会删除任何列出的字符,而不仅仅是完整的字符串。我只希望在存在确切后缀的情况下更改字符串,并且只希望将其替换一次。
例如,RTRIM("name",' Inc')将“XYZ Company Corporation”转换为“XYZ Company Corporatio”。(删除了最后的“n”,因为它是“Inc”的一部分)
接下来,我尝试使用 CASE 语句来限制不正确的替换,但这仍然没有解决问题,因为它将继续对原始后缀进行替换。
例如,当我运行这个时:
CASE WHEN "name" LIKE '% Inc' THEN RTRIM("name",' Inc')
我得到以下结果:
“XYZ Association Inc”变为“XYZ Association”。(它修剪了 Inc,但也修剪了最后的“n”)
我知道我可以使用REPLACE函数,但我的理解是,这将替换字符串中任何位置的值,并且我只想在它存在于字符串末尾时进行替换。
我该如何使用 Redshift 来做到这一点?(我无法在这里使用任何其他语言或工具)。
您可以使用将 锚定到字符串末尾的正则REGEXP_REPLACE表达式来删除尾随: Inc Inc
CASE WHEN "name" LIKE '% Inc' THEN REGEXP_REPLACE("name", ' Inc$', '')
Run Code Online (Sandbox Code Playgroud)
请注意,鉴于正则表达式仅匹配以 结尾的字符串 Inc,因此CASE WHEN "name" LIKE '% Inc'并不是绝对必要的,因为只有在为 true 时才会发生替换。然而,将其保留可能会提供更好的性能,因为正则表达式操作可能会花费大量时间。
不过,更好的解决方案是保留并在匹配时CASE WHEN简单地删除最后 4 个字符(即): Inc
CASE WHEN "name" LIKE '% Inc' THEN LEFT("name", LENGTH("name")-4)
Run Code Online (Sandbox Code Playgroud)
dbfiddle.uk上的 PostgreSQL(Redshift 基础)演示
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |