sql - 将 LIKE 结果剥离到它自己的列

标签 sql oracle

在我的 SQL 中,我正在查找使用 LIKE 命令搜索的项目。有没有办法确定在每行数据上找到了哪个 LIKE?

SELECT DISTINCT VICSEC.VSID, VICSEC.VSDESCRIPTION
FROM VSUSER.VICSEC INNER JOIN VSUSER.VSNOTES ON VICSEC.VSID=VSNOTES.VSID
WHERE VICSEC.VSSHIPDATE between sysdate and (sysdate+14)
AND(UPPER(VICSEC.VSDESCRIPTION) LIKE '%***GARTER***%'
OR UPPER(VICSEC.VSDESCRIPTION) LIKE '%DEMIBRA%'
OR UPPER(VICSEC.VSDESCRIPTION) LIKE '%PANTY%'
OR UPPER(VICSEC.VSDESCRIPTION) LIKE '%PAJAMA%'
OR UPPER(VICNOTES.VSNOTE) LIKE '%***GARTER***%'
OR UPPER(VICNOTES.VSNOTE) LIKE '%DEMIBRA%'
OR UPPER(VICNOTES.VSNOTE) LIKE '%PANTY%'
OR UPPER(VICNOTES.VSNOTE) LIKE '%PAJAMA%'
OR UPPER(VICSEC.VSSTORITEM) LIKE '%***GARTER***%'
OR UPPER(VICSEC.VSSTORITEM) LIKE '%DEMIBRA%'
OR UPPER(VICSEC.VSSTORITEM) LIKE '%PANTY%'
OR UPPER(VICSEC.VSSTORITEM) LIKE '%PAJAMA%')
ORDER BY VICSEC.VSID

最佳答案

您可以使用CASE WHEN表达式来实现:

SELECT 
  CASE WHEN UPPER(VICSEC.VSDESCRIPTION) LIKE '%***GARTER***%' THEN 1 else 0 END as GARTER,
  CASE WHEN UPPER(VICSEC.VSDESCRIPTION) LIKE '%DEMIBRA%' THEN 1 else 0 END as DEMIBRA,

等等...

如果您正在查找找到其中之一的任何内容,则可以在 WHEN 子句中使用多个表达式,因为它只需要一个表达式作为参数。

CASE WHEN UPPER(VICSEC.VSDESCRIPTION) LIKE '%DEMIBRA%' 
          OR UPPER(VICNOTES.VSNOTE) LIKE '%DEMIBRA%'  
     THEN 1 else 0 END as DEMIBRA,

关于sql - 将 LIKE 结果剥离到它自己的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455581/

相关文章:

sql - 在不指定架构名称的情况下访问表

sql - 使用纯 Oracle SQL 的任何更好的 Fibonacci 系列生成器?

c# - Oracle.DataAccess.EntityFramework,版本=6.121.2.0 找到的程序集的 list 定义与程序集引用不匹配

java - ResultSet 没有从 Oracle DB 中获取所有数据

sql - 如何从组查询中的列中选择一个值

c# - Entity Framework 和整词匹配——分页和过滤结果

具有多个计数和分组依据的 MySql 过程

mysql - 在查询中创建临时变量

c# - 在 spid = -2 的 sql server 2008 R2 上运行的进程

mysql - 使用 count 查询不存在的地方