【发布时间】:2013-03-04 12:02:59
【问题描述】:
这是我的 MS Sql 表.. 桌子: http://snag.gy/L6ag1.jpg
SELECT
*
FROM Table1
WHERE
Class = '12'
AND Section = 'B'
AND '3/4/2013' BETWEEN DATE AND TODATE
and '3/14/2013' between Date and ToDate
or '3/4/2013' < Date and '3/14/2013' > ToDate
AND (
'12:00 PM' between [StartTime] and endtime
and '1:00 PM' between [StartTime] and endtime
or ('12:00 PM' < StartTime and '1:00 PM' > EndTIme)
)
上面的查询返回表的所有 6 行,而下面的查询返回 0 行..
SELECT
*
FROM Teacher
WHERE
Class = '12'
AND Section = 'B'
and '12:00 PM' between [StartTime] and endtime
and '1:00 PM' between [StartTime] and endtime
or ('12:00 PM' < StartTime and '1:00 PM' > EndTIme)
自从我使用 AND 操作数以来,我希望顶部的查询返回 0 行,因此即使日期比较返回行,组合查询也不应该返回任何内容,因为时间比较返回 false。
创建表的脚本:
INSERT INTO [SLIITComDB].[dbo].[Teacher]
([TeacherId]
,[TeacherName]
,[Class]
,[Section]
,[SubjectId]
,[Date]
,[ToDate]
,[Day]
,[StartTime]
,[EndTIme]
,[Absent])
VALUES
(<TeacherId, int,>
,<TeacherName, varchar(50),>
,<Class, varchar(50),>
,<Section, varchar(50),>
,<SubjectId, varchar(50),>
,<Date, date,>
,<ToDate, date,>
,<Day, varchar(50),>
,<StartTime, time(7),>
,<EndTIme, time(7),>
,<Absent, varchar,>)
GO
【问题讨论】:
-
使用的数据类型是日期的日期和时间的列显示时间。没有错误。所以它必须是逻辑错误。
-
你为什么要检查每个条件两次?
标签: c# asp.net sql sql-server sql-server-2008