【问题标题】:Use ISNULL or "LIKE"使用 ISNULL 或“喜欢”
【发布时间】:2013-02-20 21:19:56
【问题描述】:

我有一个存储过程,它接受一些参数,这些参数可能为 NULL,也可能不是。

如果我有一个明确的参数值,我可以使用 ISNULL 选项,但如果我想使用“LIKE”而不是 null,我不知道该怎么做。见下文:

参数为:

@org_id as int,
@deleted as bit = NULL,
@firstname as char = NULL,
@lastname as char = NULL

选择语句是:

select user_id, firstname,lastname,firstname +' ' + lastname as fullname, email, phone,     is_tech, is_admin,is_cust
from users 
where users.org_id=@org_id and is_tech=1 and delete_flag=ISNULL(@deleted,delete_flag)
order by lastname,firstname asc

如果 firstname 和 lastname 参数不为 null,而是一个字符,例如“J”,我该如何编写类似于 delete_flag 子句的内容 ..and firstname like 'J%' but if not use null?

有什么想法吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    你可以用这个:

    WHERE field LIKE @param OR @param IS NULL
    

    【讨论】:

    • 当您拥有的不仅仅是上面的内容时,请确保在这两个部分周围加上括号。
    • 嗯 .. 似乎也不能与括号一起使用 .. 其中 users.org_id='at'org_id 和 is_tech=1 和 delete_flag=ISNULL('at'deleted,delete_flag) 和 ( firstname LIKE 'at'firstname or 'at'firstname is null)....我执行 SP 并且只传入 org_id 它可以工作,但是当我传入例如“D”作为名字没有出现,我知道有一个名字以“D”开头的用户
    • @thegunner 什么不起作用?显示查询,如果可能的话,在 sqlfiddle.com 上使用测试数据。
    • 根据@param 的构造方式,您可能需要嵌入'%'。示例:WHERE 字段 LIKE '%' + param + '%' OR param IS NULL
    • @thegunner - like 'D' 匹配“D”。 like 'D%' 匹配任何以“D”开头的字符串。有关模式,请参阅here。您可以将模式作为包含通配符的参数传递,也可以在查询中添加通配符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多