我的表中有两列,一列有小时,另一列有日期。但是,我想显示从今天起的最后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
答案 0 :(得分:1)
您需要将时间与日期相结合,以便拥有正确的DATETIME
列,以便对其进行查询。如果正确存储日期和时间,这将很容易。
如果您要单独存储DATE
和TIME
值,请使用正确的数据类型(即不是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()