检查字符串是否存在子串
Check string for substring existence
如何检查某个子字符串(例如 18UT
)是否是列中字符串的一部分?
Redshifts 的 SUBSTRING 函数允许我根据起始索引 + 子字符串的长度“剪切”某个子字符串,但不检查列值中是否存在特定子字符串。
示例:
+------------------+
| col |
+------------------+
| 14TH, 14KL, 18AB |
| 14LK, 18UT, 15AK |
| 14AB, 08ZT, 18ZH |
| 14GD, 52HG, 18UT |
+------------------+
想要的结果:
+------------------+------+
| col | 18UT |
+------------------+------+
| 14TH, 14KL, 18AB | No |
| 14LK, 18UT, 15AK | Yes |
| 14AB, 08ZT, 18ZH | No |
| 14GD, 52HG, 18UT | Yes |
+------------------+------+
这是一种选择:
select col,
case when ', ' || col || ', ' like '%, 18UT, %' then 'yes' else 'no' end has_18ut
from mytable
虽然这会解决您眼前的问题,但应该注意的是,在数据库中存储分隔列表 table 是不好的做法,应该避免。每个值都应该放在单独的行中。
如何检查某个子字符串(例如 18UT
)是否是列中字符串的一部分?
Redshifts 的 SUBSTRING 函数允许我根据起始索引 + 子字符串的长度“剪切”某个子字符串,但不检查列值中是否存在特定子字符串。
示例:
+------------------+
| col |
+------------------+
| 14TH, 14KL, 18AB |
| 14LK, 18UT, 15AK |
| 14AB, 08ZT, 18ZH |
| 14GD, 52HG, 18UT |
+------------------+
想要的结果:
+------------------+------+
| col | 18UT |
+------------------+------+
| 14TH, 14KL, 18AB | No |
| 14LK, 18UT, 15AK | Yes |
| 14AB, 08ZT, 18ZH | No |
| 14GD, 52HG, 18UT | Yes |
+------------------+------+
这是一种选择:
select col,
case when ', ' || col || ', ' like '%, 18UT, %' then 'yes' else 'no' end has_18ut
from mytable
虽然这会解决您眼前的问题,但应该注意的是,在数据库中存储分隔列表 table 是不好的做法,应该避免。每个值都应该放在单独的行中。