提问人:mccruz000 提问时间:8/30/2023 最后编辑:mccruz000 更新时间:9/1/2023 访问量:85
是否可以从单个列中修剪多个条件?
Possible to TRIM multiple criteria from a single column?
问:
这里是新手。列中的站点名称末尾有额外的字符。我想在PostgreSQL中修剪它们。
例如,这可以删除末尾的“(Temp)”。
SELECT
station_name,
RTRIM(station_name,' (Temp)')
FROM station_data
我还想删除“-SW”。
示例数据可能如下所示:
north_station
east_station
south_station
south_station (Temp)
south_station - SW
理想的结果如下所示:
north_station
east_station
south_station
south_station
south_station
我尝试过将 CASE WHEN 或 OR 与 RTRIM 一起使用,但设置/顺序错误,或者不能结合使用?谢谢。
答:
假设电台名称始终为单个单词,则可以使用以下正则表达式替换方法:
SELECT station_name, REGEXP_REPLACE(station_name, ' .*', '') AS station_name_out
FROM station_data;
如果数据总是具有这种形式,即首先是一个带有电台名称的字符串,然后是一个空格,然后是另一个包含一些附加信息的字符串,我们可以只用来选择第一个空格之前的部分:SPLIT_PART
SELECT
station_name,
SPLIT_PART(station_name, ' ', 1) AS newStationName
FROM station_data;
这里有一个基于示例数据的 db<>fiddle。
如果您有其他用例并需要更复杂的解决方案,请扩展问题以显示这些用例。
您可以使用 REPLACE 函数。此函数允许您将特定子字符串替换为另一个子字符串。通过连续使用两次 REPLACE,可以从工作站名称中删除“(Temp)”和“- SW”。这就像剥离两层:首先,你去掉'(Temp)',然后你去掉'-SW'。这将为您提供要查找的已清理的电台名称。
SELECT station_name, REPLACE(REPLACE(station_name, ' (Temp)', ''), ' - SW', '') as trimmed_station_name FROM station_data;
希望这对你有用。
评论
SPLIT_PART
是 PostgreSQL 中可用的字符串操作函数。
SPLIT_PART(input_string, delimiter, segment_number)
input_string
:这是您要从中提取的字符串 段。delimiter
:分隔符是字符或子字符串 用于分隔输入字符串中的各个段。segment_number
:这是您要放置的区段的位置 提取。它是一个正整数。
您可以使用函数从字符串中修剪某些部分。SPLIT_PART
SELECT
station_name,
SPLIT_PART(station_name, ' ', 1) as changed_station_name
FROM station_data;
您可以使用REGEXP_REPLACE函数从站名末尾删除“(Temp)”和“- SW”。试试这段代码:
SELECT station_name,
REGEXP_REPLACE(REGEXP_REPLACE(station_name, ' \\(Temp\\)$', ''), ' - SW$', '') AS cleaned_station_name
FROM station_data;
上一个:如何在连接条件下使用修剪功能。?
下一个:在 R 中剪裁数据
评论
RTRIM(RTRIM(station_name,' (Temp)'), ' - SW')
也许?