在Presto SQL中如何移除字符串中指定模式起始后的内容?
SQL实现指定模式前的字符串保留方案
针对你需要保留hi {{user_name}}模式之前内容、移除模式及后续部分的需求,不同SQL方言的实现如下:
MySQL/MariaDB 实现
利用LOCATE定位模式位置,结合SUBSTRING截取目标片段,最后用TRIM清理末尾多余空格:
SELECT CASE WHEN LOCATE('hi {{user_name}}', input_str) > 0 THEN TRIM(TRAILING ' ' FROM SUBSTRING(input_str, 1, LOCATE('hi {{user_name}}', input_str) - 1)) ELSE input_str END AS cleaned_str FROM your_table;
PostgreSQL 实现
用STRPOS替代LOCATE,逻辑和MySQL一致:
SELECT CASE WHEN STRPOS(input_str, 'hi {{user_name}}') > 0 THEN TRIM(TRAILING ' ' FROM SUBSTRING(input_str, 1, STRPOS(input_str, 'hi {{user_name}}') - 1)) ELSE input_str END AS cleaned_str FROM your_table;
SQL Server 实现
使用CHARINDEX定位,LEFT截取片段,RTRIM清理空格:
SELECT CASE WHEN CHARINDEX('hi {{user_name}}', input_str) > 0 THEN RTRIM(LEFT(input_str, CHARINDEX('hi {{user_name}}', input_str) - 1)) ELSE input_str END AS cleaned_str FROM your_table;
补充说明
- 若目标字符串中不存在
hi {{user_name}},会直接返回原字符串,匹配你的示例需求 TRIM/RTRIM用于移除模式前可能存在的多余空格,保证输出格式整洁- 如果需要忽略大小写匹配,可以在定位时用
LOWER函数统一转换字符串,比如LOCATE(LOWER('hi {{user_name}}'), LOWER(input_str))
内容的提问来源于stack exchange,提问作者Keyang Zhang
相关产品推荐
相关产品推荐

