0

使用 SQL Server 2008,

我有一个程序如下:

SELECT 
    UserId, Name, Company, LanguageId, CodeRegisteredWith, TotalLoggedInDuration, 
    Region, IsAdmin,
    IsRep, IsRetailer, IsTeamLeader, [dateregistered] 
FROM 
    RoundupAcademy.dbo.UserProfile WITH(NOLOCK)
WHERE 
    (Convert(smalldatetime, DateRegistered, 120) >= Convert(smalldatetime, '2013-1-1', 120) 
    AND (Convert(smalldatetime, DateRegistered, 120) <= convert(smalldatetime, '2013-8-8', 120)))

这可以正常工作并显示日期之间的结果。

但是,在扩展此查询和更多条件时,如下所示:

SELECT 
   UserId, Name, Company, LanguageId, CodeRegisteredWith, TotalLoggedInDuration,     
   Region, IsAdmin, IsRep, IsRetailer, IsTeamLeader, [dateregistered] 
FROM 
   RoundupAcademy.dbo.UserProfile WITH(NOLOCK)
WHERE 
   UserId is not null OR UserId not like '' 
   AND 
   (@LanguageID = 0 OR ([LanguageID] = @LanguageID ))
   AND 
   ((Convert(smalldatetime, DateRegistered, 120) >= Convert(smalldatetime, @datereg,  120) 
AND (Convert(smalldatetime, DateRegistered, 120) <= convert(smalldatetime, @dateend, 120))))

似乎有任何日期显示。

不知道问题是什么,因为我的其他条件看起来不错。

有任何想法吗?

4

2 回答 2

3

代替

WHERE UserId is not null OR UserId not like '' 

WHERE (UserId is not null OR UserId not like '')

否则,您将获得所有条件UserId is not null 其他条件为真的记录。

于 2013-08-13T10:08:09.837 回答
1

查询应该是这样的

SELECT UserId, Name, Company, LanguageId, CodeRegisteredWith, TotalLoggedInDuration, Region, IsAdmin,
IsRep, IsRetailer, IsTeamLeader, [dateregistered] FROM RoundupAcademy.dbo.UserProfile WITH(NOLOCK)
WHERE( UserId is not null OR UserId not like '') 
AND 
(@LanguageID = 0 OR ([LanguageID] = @LanguageID ))
AND 
((Convert(smalldatetime,DateRegistered, 120) >= Convert(smalldatetime,@datereg,  120) 
AND (Convert(smalldatetime,DateRegistered, 120) <= convert(smalldatetime,@dateend, 120))))
于 2013-08-13T10:15:42.677 回答