sql - 修剪完整的字符串,而不是字符 - 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 协会”成为“XYZ 协会”。(它修剪了 Inc,但也修剪了最后的“n”)
我知道我可以使用REPLACE函数,但我的理解是这将替换字符串中任何位置的值,我只想替换它存在于字符串末尾的值。
如何使用 Redshift 做到这一点?(我在这里无法使用任何其他语言或工具)。
解决方案
您可以使用将锚定到字符串末尾的正则表达式REGEXP_REPLACE
来删除尾随:Inc
Inc
CASE WHEN "name" LIKE '% Inc' THEN REGEXP_REPLACE("name", ' Inc$', '')
推荐阅读
- c# - VirtualizingPanel.ScrollUnit="Pixel" 不适用于 .Net 4.6.2。需要替代品
- python - 无法使用 BeautifulSoup 从 select_one 中获取文本
- python - 将函数应用于具有空值的列,如果为空则返回 NaN
- swift - 滑动时收集视图单元格偏离中心
- windows - 来自 vb.net windows 应用程序的 Word 合并
- python - 正则表达式捕获组
- visual-studio - 如何在 Visual Studio 中使用多个 SCSS 文件的引用路径来利用 Intellisense,而无需将其添加到每个文件中?
- python - AttributeError:模块“cv2.cv2”没有属性“CascadeClassifer”(OpenCV 人脸检测)
- maven - 带有 Junit 的 QAF-Cucumber:Maven 安装在 ConfigurationManager 处抛出错误
- java - 我将 jsonString 转换为 Object 的功能不起作用