【问题标题】:How do I print the matched pattern that produced the result of a multi-like case statement?如何打印产生多类 case 语句结果的匹配模式?
【发布时间】:2020-11-11 16:29:27
【问题描述】:

我希望将来自 SQL 中的 multi-like case when 语句的字符串字段(标题)的匹配模式作为字符串值存储在列 (matched_pa​​ttern) 中。

示例表:


|      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_pa​​ttern 列

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


【解决方案1】:

如果你在另一个表或临时表或其他东西中实现模式,你可以简单地这样做:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 2023-02-07
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多