简单的选择查询不使用'AND'运算符

时间:2017-03-03 21:44:15

标签: sql-server tsql

enter image description here

我正在制定一个时间表,因此我想运行一个查询,该查询在数据库中执行检查以查看某个StartTime和EndTime之间的所有类。用户将选择将作为DateTime格式02/03/2017 00:00:00存储在标签中的类的开始和结束时间。

我想运行一个查询来检查一个类,所以我想使用选定的开始时间来查看类是否大于或等于此开始日期但小于第二天03/03/2017 00:00: 00。以下查询工作正常,但我将使用参数化值。

我目前的查询是:

SELECT * FROM Class WHERE (StartTime >='02/03/2017 00:00:00') AND ( EndTime <= '03/03/2017 00:00:00' )

我想要的参数查询:

SELECT * FROM Class WHERE (StartTime >='@StartTime') AND ( EndTime <= '@EndTime' )

5 个答案:

答案 0 :(得分:4)

@StartTime和@EndTime周围有引号。删除那些,所以下面的内容应该会给你正确的结果。

declare
    @StartTime datetime = '2017-03-02 00:00:00.000',
    @EndTime datetime =  '2017-03-03 00:00:00.000'
SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime <= @EndTime )

还要解决您的新要求

  

我只想将开始时间的值增加1天

这是代码

declare
    @StartTime datetime = '2017-03-02 00:00:00.000'

-- Add 1 day to start time to get the end date.
declare
    @EndTime datetime =  dateadd(day, 1,  @StartTime)

SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime <= @EndTime )

答案 1 :(得分:2)

尝试不使用单引号:

SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime <= @EndTime )

答案 2 :(得分:1)

您必须删除引号

SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime <= @EndTime )

您的查询尝试解析字符串“@EndTime”

之外的日期

答案 3 :(得分:1)

您可以声明StartTime和EndTime,您的请求是:

SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime <= @EndTime )

答案 4 :(得分:1)

declare @startTime datetime;
declare @endTime datetime;

set @startTime = cast(getdate() as date);  -- sets start time to start of current day
set @endTime = dateadd(day,1,@startTime);  -- sets end date to one day past start date

SELECT * FROM Class WHERE (StartTime >=@StartTime) AND ( EndTime < @EndTime ) -- use < for value to be less than next day