我有这个sql:
select * from employees
where
lastname like '%smith%' and firstname like '%bob%' and middle like '%%'
问题是名称的值,特别是中间名,可以为null。所以上面的陈述会找到:
smith, bob mike
但找不到
smith, bob
因为Bob的中间名是null(他没有中间名。)
我有这个有效,但我认为有一个更好的方法,并希望输入:
select * from employees
where
lastname like '%smith%'
and firstname like '%bob%'
and (middle like '%%' or middle is null)
编辑:
中间并不总是空白。有时它会有一个值,所以我必须保持中间名的测试。它可以填充或为空。感谢。如果重要的话,我正在使用Oracle 11g。
答案 0 :(得分:5)
但是
middle like '%%' or middle is null
始终为true:middle
为空,在这种情况下middle is null
为真,或者包含一个或多个字符,在这种情况下middle like '%%'
为真。所以你可以写:
select * from employees
where
lastname like '%smith%' and firstname like '%bob%'
答案 1 :(得分:1)
您可以使用nvl:
select * from employees
where
lastname like '%smith%' and firstname like '%bob%' and nvl(middle,'') like '%%'
但这与不检查中间名完全相同,因为'%%'将匹配除null之外的任何内容。
答案 2 :(得分:0)
也许你可以从查询中删除“中间”约束?
看起来你真的不介意它的价值,所以为什么不呢:
select * from employees
where
lastname like '%smith%' and firstname like '%bob%'