考虑day和Times,在两个日期(今天和昨天)之间获取记录

时间:2017-01-05 05:53:51

标签: sql sql-server date datetime

我有三列名为docDt,docDateTime和docTime。

docDt仅包含日期部分(例如2017-01-01 00:00:00:000)且docTime仅包含时间(例如1900-01-01 22:00:00:000)

此外,我将docDt和docTime组合存储到docDateTime(即2017-01-01 22:00:00:000)

我正在将新记录插入docDt(2017-01-02 00:00:00:000)和docTime(1900-01-01 10:00:00:000)的表中,并存储组合的日期和时间(2017-01-02 10:00:00:000)docDateTime。

现在我需要获取大于上述2017-01-01 22:00:00:000

的记录

我尝试过使用以下条件

CONVERT(varchar(8), STH.DocTime , 108) >= '22:00:00.000' and CONVERT(varchar(10),  STH.DocDt , 120) >='2017-01-01' ORDER BY STH.DocDt

注意:对于docTime,默认日期为1900-01-01

  

编辑:docDateTime仅供参考,我们不能使用它,因为它将存储在mysql中。 doctime和docdt存储在sqlserver中的位置

我可以得到任何帮助。

3 个答案:

答案 0 :(得分:1)

如果日期列docDt的时间部分始终为零,且时间列docTime的日期部分也始终为基准日期(1900-01-01),那么您只需添加此项,

SELECT *
FROM   TABLE
WHERE  docDt + docTime > '2017-01-01 22:00:00:000'

答案 1 :(得分:0)

比较日期:(完全正常):

DECLARE @DATE TABLE (docDt  DATETIME,docTime DATETIME,docDateTime DATETIME )
INSERT INTO @DATE VALUES('2017-01-01 00:00:00:000','1900-01-01 22:00:00:000','2017-01-01 22:00:00:000')
INSERT INTO @DATE VALUES('2017-01-02 00:00:00:000','1900-01-01 10:00:00:000','2017-01-02 10:00:00:000')

SELECT * FROM @DATE WHERE docDateTime>'2017-01-01 22:00:00:000'

- 或(根据您的要求)

select * from @DATE where (CONVERT(VARCHAR(10), docDt, 120)+' '+CONVERT(VARCHAR(10), docTime, 108))>'2017-01-01 22:00:00:000'

结果:

------------------------------------------------------------------------
|2017-01-02 00:00:00.000|1900-01-01 10:00:00.000|2017-01-02 10:00:00.000|
-------------------------------------------------------------------------

答案 2 :(得分:-1)

尝试使用docDateTime

 docDateTime >2017-01-01 22:00:00:000