2013-04-30 73 views
0

對不起,如果這已被問到某處準備好,但我一直在努力尋找答案!我有一個日期時間字段,是活動日期時間戳。Getdate之間

我需要一個查詢,只能爲今天的日期和08:00到10:00之間的事件之間的數據帶回信息。我的大腦說它應該是直截了當的,但我不能這樣做。

感謝

+0

您是否嘗試過使用BETWEEN? – IndoKnight 2013-04-30 10:37:07

+0

更多關於如何使用Getdate()08:00:00和getdate()10:00:00之間的查詢。我需要它獲取當前日期,並且只在這兩次之間返回數據。 – GPH 2013-04-30 10:39:01

回答

1

在這裏你去...

SELECT * FROM <TABLE_NAME> WHERE EVENTS_DATE BETWEEN 
DATEADD(hour, 8, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 
AND 
DATEADD(hour, 10, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 

如果您在TSQL那麼今天店裏的日期使用的變量在

DATEADD(day, DATEDIFF(day, 0, GETDATE()) 
+0

完美!作品一種享受!謝謝Indoknight! – GPH 2013-04-30 11:26:24

+0

歡迎您:) – IndoKnight 2013-04-30 12:09:10

0
select ... 
where dateColumn between 
    convert(varchar(10), getdate(), 120) + 'T08:00:00' 
    and convert(varchar(10), getdate(), 120) + 'T10:00:00' 
2

爲了得到一個特定點在時間上,我傾向於使用DATEADD/DATEDIFF模式。它可以看起來有點笨拙,但執行相當不錯,一旦你習慣了看到它,它變得更具可讀性:

SELECT * --TODO - Pick columns 
FROM Activities 
WHERE OccurredAt BETWEEN 
    DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') AND 
    DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T10:00:00') 

這裏我使用了兩次。它只是依賴於你選擇的兩個日期常量之間的關係,因爲它們展示了你想要的功能。所以在這裏:

DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') 

我正在計算從2001年1月1日到現在爲止所經過的(整個)天數。然後,我在2001年1月1日的08:00將這個(整個)天數加上 - 從邏輯上講,今天將產生08:00。

+0

這個效果很好+1。但是,不知道默認日期格式如何更改。 – IndoKnight 2013-04-30 12:11:20

+0

@Indoknight - 我所顯示的日期/日期時間常量的格式是原樣的,因爲無論格式設置是否有效,都能保證工作(即沒有時間的日期,YYYYMMDD保證解釋。對於帶*時間的日期*,您必須移動到包含破折號/冒號並使用「T」來分隔日期和時間) – 2013-04-30 12:53:14

+0

任何在時間之前使用T而不是空格的理由? ODBC規範形式使用空間。 – Aryadev 2013-04-30 13:34:45