sql - 检查字符串是否存在子字符串
问题描述
如何检查某个子字符串(例如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
虽然这将解决您的直接问题,但应该注意在数据库表中存储分隔列表是不好的做法,应该避免。每个值都应该放在单独的行中。
推荐阅读
- php - PHP 文件上传错误 (UPLOAD_ERR_PARTIAL) / $_FILES 为空或有空“tmp_name”
- java - 我的美元符号在 Android Studio 上不起作用?
- scikit-learn - fit() 缺少 1 个必需的位置参数:'self'
- python - 如何使用 pybind11 将 python tf.Tensor 转换为 C++ Tensor
- json - 在序列化 JSON 的末尾获取一个 INT
- c - 在索引 n 处用 m 次数据填充没有位域的数组
- raspberry-pi3 - 为什么我的树莓派 3 型号 b 会发疯?
- r - 用 R 中的 NA 替换数据框中的 -Inf
- flutter - 找到 androidManifest 扑腾
- laravel - Laravel 顺序处理用户的并发请求