显示SQL Server中所选日期的最后24小时

时间:2015-02-17 21:05:03

标签: sql sql-server tsql

我的表中有两列,一列有小时,另一列有日期。但是,我想显示从今天起的最后24小时的日期和选定的小时。例如,如果我选择上午10:30作为我的随机时间,我想显示从上午10:30到今天的最后24小时。

我相信我的语法错误,请帮助。

select 
    ID, MilitaryHours, DT 
from 
    myTable 
where 
    MilitaryHours >= 1030 and DT  >= DATEADD(HOUR, -24, GETDATE())

这是我的ddl

CREATE TABLE myTabl
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [MilitaryHours] [nvarchar](20) NULL,
    [DT] [datetime] NULL

    CONSTRAINT [PK_Diary] 
    PRIMARY KEY CLUSTERED ([ID] ASC)
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
              IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
              ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

1 个答案:

答案 0 :(得分:1)

您需要将时间与日期相结合,以便拥有正确的DATETIME列,以便对其进行查询。如果正确存储日期和时间,这将很容易。

如果您要单独存储DATETIME值,请使用正确的数据类型(即不是VARCHAR/NVARCHAR

WITH FullDatetime AS 
(
    SELECT
        ID
        , DATEADD(DAY, DATEDIFF(DAY, '19000101', DT), 
            CAST(LEFT(MilitaryHours,2) + ':' + RIGHT(MilitaryHours,2) + ':' + '00' AS DATETIME)) AS FullDatetime

    FROM
        myTable
)

SELECT
    *

FROM
    FullDatetime

WHERE
    FullDatetime BETWEEN DATEADD(HOUR, -24, GETDATE()) AND GETDATE()