和子句使用条件日期时间SQL Server

时间:2017-02-28 08:31:09

标签: sql sql-server sql-server-2008

我正在使用此方法获取数据: -

declare @date varchar(30),@time varchar(20);
set @date = REPLACE(CONVERT(varchar(10), getdate(), 102), '.', '-');
set @time = FORMAT(getdate(), 'HH:mm');

select j.JourneyID,j.Source
        from journeytb j left join usertb u on j.userid = u.userid 
        left join TravelerTypeTB traveler on j.TravelerType = traveler.SrNo             
            where 
                j.UserID = @user_id

                and j.StartDate >= (case when (@start_date is null) then @date when @start_date is not null then @start_date else @date end)
                and j.StartTime >= (case when @start_time is null then @time when @start_time is not null then @start_time else  @time end)

我想检查日期和时间,让我说我检查当前日期,如果它小于表格列中的日期那么它是真的和同样的时间情况问题这里是如果日期是在时间范围内,如果时间不是那么它是真的,那么不提供来自表的数据我想在这个'AND'条款中检查日期和时间或者是他们的任何其他方式 < / p>

2 个答案:

答案 0 :(得分:2)

如果你有两个分开的日期和时间值,你难道不能通过将它们连接成一个DATETIME格式并比较它来更容易地解决这个问题吗?例如:

DECLARE @TABLE TABLE -- Example table with data
(
     StartDate VARCHAR(10)
    ,StartTime VARCHAR(5)
);

INSERT INTO @TABLE VALUES ('01/01/2017','10:15');
INSERT INTO @TABLE VALUES ('02/02/2017','11:25');
INSERT INTO @TABLE VALUES ('03/03/2017','15:05');
INSERT INTO @TABLE VALUES ('04/02/2017','06:00');

DECLARE @CURRENT AS DATETIME;
SET @CURRENT = GETDATE(); -- The parameter you're checking against

SELECT *
FROM @TABLE 
WHERE CONVERT(DATETIME,StartDate + ' ' + StartTime) < @CURRENT -- Concatenated full DATETIME compared to the parameter
;

仅返回表中那些小于您正在检查的值的日期。

当然,你可以用这种方式来做各种不同的方式......

答案 1 :(得分:0)

这是怎么回事?

and
(
    (
    j.StartDate = (case when (@start_date is null) then @date when @start_date is not null then @start_date else @date end)
    and j.StartTime >= (case when @start_time is null then @time when @start_time is not null then @start_time else  @time end)
    )
    or
    j.StartDate > (case when (@start_date is null) then @date when @start_date is not null then @start_date else @date end
)