2015-02-17 100 views
0

我的表中有2列,一个有小时,另一个有日期。但是,我想显示从今天和选定小时起的最后24小时。例如,如果我选择上午10点30分作为我的随机小时,我想从上午10点30分和今天的日期显示最近24小时。显示SQL Server中选定日期的最近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

请编辑您的问题,包括了'CREATE TABLE' DDL为'myTable'所以很清楚涉及哪些数据类型。我添加了 – 2015-02-17 21:07:49

+0

。我想我需要更改军事小时的数据类型 – moe 2015-02-17 21:13:47

+0

您的DT日期时间列是否包含存储在MilitaryHours列中的相同时间? – mheptinstall 2015-02-17 21:15:43

回答

1

你需要让你有一个正确的DATETIME列,这样您查询反对它的时间与日期相结合。如果日期和时间正确存储,这将很容易。

如果你要存储DATETIME值seperately然后用正确的数据类型(即不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() 
+0

我收到不正确的语法选择 ID ,DATEADD(DAY,DATEDIFF(DAY, '19000101',DT), CAST(LEFT(MilitaryHours,2)+ ':' + RIGHT(MilitaryHours ,2)+ ':' + 00 AS DATETIME)AS FullDatetime FROM myTable的 – moe 2015-02-17 21:24:34

+0

它不喜欢这样的:在像以前一样fulldatetime – moe 2015-02-17 21:25:22

+0

可能的缺失在端部的托架, – mheptinstall 2015-02-17 21:27:01