SQL查询条件

问题描述:

我有一个SQL查询mr.Name可能是空的,所以如果它是空的我不想考虑它。我怎么能写这样的查询,如果它包含数据考虑它where如果不能表现得像SQL查询条件

where da.LastRefreshTime >= xx and da.LastRefreshTime <= xx and 
     da.M = z 

这是我的SQL查询:

SELECT distinct ... 
FROM ... 
where da.LastRefreshTime >= xx and da.LastRefreshTime <= xx and 
    da.M = z and mr.Name in ('FRANCE','ITALY') 
+1

MySQL,SQL Server或C#?请选择一个。提示:这不是C#... – DavidG

+0

重要吗? @DavidG'列不为空'适用于两者(尽管在mySql中没有经验) – CM2K

+0

@ CM2K是的,它确实很重要。 – DavidG

SELECT distinct ... 
FROM ... 
where da.LastRefreshTime >= xx and da.LastRefreshTime <= xx and 
    da.M = z and ((mr.Name in ('FRANCE','ITALY') and mr.Name is not NULL) or 1 = 1) 

我想这是你想要的,尝试一下,告诉我,如果这能解决你的问题

+0

但是,如果它是空的,它不会考虑整个部分。我想要它,因为我只是想考虑'where da.LastRefreshTime> = xx和da.LastRefreshTime lol

+0

我得到你想要的。等待几分钟,记下来 – CM2K

+0

请看我更新的答案@lol – CM2K

使用IS NOT NULL

WHERE mr.Name IS NOT NULL; 

是不是就是用NULL条件来测试在SELECT,INSERT,UPDATE一个NOT NULL值 ,或DELETE

+0

'where column not null'也是一个有效的sql server语法。 – CM2K

你似乎想回行,其中名称是法国,意大利或NULL 。因此,只需添加一个OR子句和括号: -

SELECT DISTINCT ... 
FROM ... 
WHERE da.LastRefreshTime >= xx 
AND da.LastRefreshTime <= xx 
AND da.M = z 
AND (mr.Name IN ('FRANCE','ITALY') 
OR mr.Name IS NULL) 
+0

不,我想在mr.Name为null的情况下忽略where子句中的过滤器mr.Name。如果mr.Name为空,我希望查询忽略它,如:其中da.LastRefreshTime> = xx和da.LastRefreshTime lol

+0

对不起,我看不出差异。这个查询将返回行被法国或意大利过滤的行,但是如果Name为null,那么它也会返回(如果它符合其他WHERE子句)。 – Kickstart

+0

@Kickstart请看我的答案,我想他想删除'mr.Name IN('FRANCE','ITALY')'如果'mr.Name为null'。我是否正确? – CM2K