sql - 如何在 SQL where 子句中执行条件语句

标签 sql sql-like

我想做的是当@aValue参数类似于“abc%”时运行

select 
    f.name, f.amount, f.date 
from 
    fakeTable f
where f.name like @aValue
    and f.date > '01/01/2000'

否则,如果@aValue参数不是“abc%”,则选择f.name等于@aValue的所有记录。

select 
        f.name, f.amount, f.date 
    from 
        fakeTable f
    where f.name = @aValue
        and f.date > '01/01/2000'

我正在尝试使用我的Where 中的CASE 语句来完成此操作。在我的 where 语句中出现错误

Incorrect syntax near LIKE

我的查询:

Declare @aValue varchar(5) = 'abcde';
-- @aValue = 'xyz';

select 
    f.name, f.amount, f.date 
from 
    fakeTable f
where 
    f.name = case 
                 when @aValue 'abc%' 
                     then f.name like @aValue
                 else f.name = @aValue
             end
    and f.date > '01/01/2000'

我做错了什么导致语法错误?

最佳答案

不要使用 CASE 表达式,而是使用 ORAND 运算符,如下所示:

WHERE (
        (@aValue LIKE 'abc%' AND f.name LIKE @aValue) 
        OR 
        (@aValue NOT LIKE 'abc%' AND f.name = @aValue)
      )
  AND f.date > '01/01/2000'

关于sql - 如何在 SQL where 子句中执行条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69195729/

相关文章:

sql - SQL Server 查询中的 Like 语句不返回所有结果

mysql - 像 MySQL 中的大小写敏感一样

c# - TSQL:使用 INSERT INTO SELECT FROM 进行更新

mysql - ISCO/国际标准职业分类的 SQL 表设计

mysql - 查询两个表,其中一行与另一行相似

sql - Oracle:将两个不同的查询合并为一个,LIKE & IN

sql,找出字符串包含某些文本的策略

mysql - 我该如何计算这个日期?

mysql - 从两个表中统计和选择数据

java - 保存 TextField 值时出现 "java.lang.NullPointerException"- JavaFx