【发布时间】:2020-11-11 16:29:27
【问题描述】:
我希望将来自 SQL 中的 multi-like case when 语句的字符串字段(标题)的匹配模式作为字符串值存储在列 (matched_pattern) 中。
示例表:
| Title | Email |
|---------------------|------------------|
| CEO | henry@test.com |
|---------------------|------------------|
| COO | julien@test.com |
|---------------------|------------------|
我的查询是
select
title,
email,
CASE WHEN lower(title) LIKE '%cco%' OR
lower(title) LIKE '%ceo%' THEN 'CxO' ELSE null END persona
FROM table
我想要的结果是
| Title | Email | Persona |matched_pattern |
|------------|------------------|---------------------------|
| CEO | henry@test.com | CxO | '%ceo%' |
|------------|------------------|---------|-----------------|
| CcO | julien@test.com | CxO | '%cco%' |
|------------|------------------|---------|-----------------|
有没有办法将生成结果的代码存储在单独的列中?我使用了另一个 case 语句来创建matched_pattern 列
SELECT
title,
CASE WHEN lower(title) LIKE '%cco%' THEN 'CxO'
CASE WHEN lower(title) LIKE '%ceo%' THEN 'CxO'
ELSE null END persona,
CASE WHEN lower(title) LIKE '%cco%' THEN '%cco%'
CASE WHEN lower(title) LIKE '%ceo%' THEN '%ceo%'
ELSE null END matched_pattern
FROM table
有没有更好的方法来做到这一点?
【问题讨论】:
-
对于非常短的字符串只有两种不同的可能性,这一切似乎都是毫无意义的练习。这里有更大的目标吗?模式
%c_o%或patindex有用吗? -
您使用的是哪个数据库系统?根据数据库系统,您可以使用计算列(始终生成为
)或触发器来填充列等。
标签: sql string sql-like case-statement