sql - 如何打印产生多类 case 语句结果的匹配模式?
问题描述
我希望将来自 SQL 中的多类 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
有一个更好的方法吗?
解决方案
如果您在另一个表或临时表或其他东西中实现模式,您可以简单地执行以下操作:
SELECT *
FROM DataSource DS
LEFT JOIN Paterns P
ON DS.[Title] LIKE P.[patern]
这是 SQL Server 上的完整工作示例:
CREATE TABLE DataSource
(
[Title] VARCHAR(12)
,[Email] VARCHAR(32)
);
CREATE TABLE Paterns
(
[patern] VARCHAR(12)
,[value] VARCHAR(12)
);
GO
INSERT INTO DataSource ([Title], [Email])
VALUES ('CEO', 'henry@test.com')
,('CEO', 'julien@test.com');
INSERT INTO Paterns ([patern], [value])
VALUES ('%ceo%', 'CxO')
,('%cco%', 'CxO')
SELECT *
FROM DataSource DS
LEFT JOIN Paterns P
ON DS.[Title] LIKE P.[patern]
推荐阅读
- node.js - 与木偶师的 Highcharts
- ssl - 带有 ECC 客户端证书密钥和 RSA 根证书密钥的 2-way TLS
- html - 找不到所需的文件。名称:index.html
- reactjs - 如果文本大小在本机反应中增加,如何增加视图大小(自动)
- javascript - 我想在 Javascript 代码中设置高度
- c# - c# dataGridView for循环添加数据
- excel - 检查字符串是否包含数字
- python - 如何通过市场将熊猫数据帧发送到部署在谷歌云平台上的 H2O 集群?
- django - GeoDjango,基于数据库列的距离过滤器,考虑到搜索者和他正在寻找的人的半径
- python - 如何在 sklearn 的分类中使用时间序列数据