在 SQL 服务器中显示所选日期的最后 24 小时

Show last 24 hours from selected date in SQL Server

我的 table 中有 2 列,一列是时间,另一列是日期。但是,我想显示从今天开始的最后 24 小时和 selected 小时。例如,如果我 select 10:30 am 作为我的随机小时,我想显示从 10:30 am 到今天日期的最后 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

您需要将时间与日期结合起来,这样您就有了一个合适的 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()