我正在使用此方法获取数据: -
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>
答案 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
)