2015-02-17 105 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