簡體   English   中英

如何使用SQL datetime字段在一定時間后獲取記錄

[英]How to get records after a certain time using SQL datetime field

如果我有一個日期時間字段,我如何獲得僅在某個時間之后創建的記錄,完全忽略日期?

它是一個記錄表,它告訴人們何時連接並在我們的應用程序中執行某些操作。 我想知道人們在晚上5點以后的頻率。

(抱歉 - 它是SQL Server。但這可能對其他人的其他數據庫有用)

對於SQL Server:

select * from myTable where datepart(hh, myDateField) > 17

請參閱http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspx

您使用的是什么數據庫系統? 日期/時間功能差異很大。

對於Oracle,你可以說

SELECT * FROM TABLE 
  WHERE TO_CHAR(THE_DATE, 'HH24:MI:SS') BETWEEN '17:00:00' AND '23:59:59';

此外,您可能需要翻到第二天,並選擇午夜和早上6點之間的時間。

在MySQL中,這將是

where time(datetimefield) > '17:00:00'

我能想到的最好的事情是:不要使用DateTime字段; 好吧,你可以使用很多DATEADD / DATEPART等,但是如果你有很多數據它會很慢,因為它不能真正使用索引。 您的數據庫可以本機提供合適的類型 - 例如SQL Server 2008中的TIME類型 - 但您可以輕松地以分鍾為單位存儲時間偏移(例如)。

對於MSSQL,使用CONVERT方法:


DECLARE @TempDate   datetime = '1/2/2016 6:28:03 AM'
SELECT  
    @TempDate as PassedInDate,  
    CASE 
        WHEN CONVERT(nvarchar(30), @TempDate, 108) < '06:30:00' then 'Before 6:30am'
        ELSE 'On or after  6:30am'
    END,
    CASE 
        WHEN CONVERT(nvarchar(30), @TempDate, 108) >= '10:30:00' then 'On or after 10:30am'
        ELSE 'Before 10:30am'
    END 

好的,我知道了。

select myfield1, 
       myfield2, 
       mydatefield
  from mytable
 where datename(hour, mydatefield) > 17

這將使我獲得mydatefield的記錄,時間晚於下午5點。

針對簡單情況的另一種Oracle方法:

select ...
from   ...
where  EXTRACT(HOUR FROM my_date) >= 17
/

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions050.htm#SQLRF00639

但是對於一些問題很棘手,就像15:03:21到15:25:45之間的所有記錄一樣。 我也在那里使用TO_CHAR方法。

在Informix中,假設您使用DATETIME YEAR TO SECOND字段來保存完整日期,您可以寫:

WHERE EXTEND(dt_column, HOUR TO SECOND) > DATETIME(17:00:00) HOUR TO SECOND

'EXTEND'確實可以收縮字段集(以及擴展它,顧名思義)。

正如Thilo所指出的,這是DBMS之間極端可變的區域(而Informix肯定是變體之一)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM