簡體   English   中英

SQL數據庫日期列與當前日期進行比較

[英]SQL database date column is comparing with current date

我的問題是,如果日期字段大於當前日期,我想從數據庫中選擇記錄

我使用以下代碼

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
    CONVERT(varchar(10), eve_date, 101) >= CONVERT(varchar(10), " + DateTime.Now.ToShortDateString() + ",101)"

但它不起作用

我將數據庫中的日期列作為DateTime ..並使用jquery datetime picker保存日期時間

假設服務器日期是可接受的,並且這是SQL Server(它看起來就像你使用CONVERT ),你可以在SQL中執行此操作:

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
    eve_date >= DATEADD(day,DATEDIFF(day,0,CURRENT_TIMESTAMP),0)

這也可以使用eve_date上的索引(如果有的話) - 因為我不再對它應用任何函數。 我正在使用DATEADD / DATEDIFF從當前日期時間(通過CURRENT_TIMESTAMP )中刪除時間組件。

如果您使用的是SQL Server,則可以使用GETDATE()函數。 這將返回當前日期/時間。 如果您的日期時間字段僅包含DATE部分,則需要刪除GETDATE()結果的時間部分。

SELECT
  *
FROM
  eventdetails
WHERE
  eve_date>=CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);

您將看到時間部分被剝離了GETDATE()的結果,將其轉換為浮動,將其鋪設並將其轉換回DATETIME類型。 還有其他方法可以做到這一點,參見Damien的解決方案。 由於引擎蓋下的DATETIME存儲為FLOAT,因此只調用一個普通函數(FLOOR),並且比DATEADD / DATEDIFF技巧表現更好。

如果eve_date也可以包含TIME部分,並且您只想比較DATE部分,則還必須CAST / CONVERT eve_date進行比較:

SELECT
  *
FROM
  eventdetails
WHERE
  CAST(FLOOR(CAST(eve_date AS FLOAT)) AS DATETIME)>=CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);

現在,這些都是在SQL Server 2005及其下面的角度編寫的,其中DATE類型不存在。 對於SQL Server 2008及更高版本,轉換為DATE類型也將剝離TIME部分:

SELECT
  *
FROM
  eventdetails
WHERE
  CAST(eve_date AS DATE)>=CAST(GETDATE() AS DATE);

請注意,GETDATE函數等同於ANSI SQL標准定義的CURRENT_TIMESTAMP函數。

嘗試這個,

它很簡單,符合您的要求

: -
假設您使用的是SQL SERVER

   SELECT 
        Id, eve_name, eve_date, eve_place,eve_desc 
    FROM 
        EventDetails 
    WHERE 
         eve_date >= getdate()

由於在數據庫eve_date列類型是Datetime,所以不應該有任何問題。

CONVERT數據類型從varchar更改為datetime

試試這個SQL QUERY:

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
   eve_date>= CONVERT(datetime, '@dtp',101)

C#代碼avaoiding SQL注入:

try
{
  cmd=new SqlCommand(SELECT Id, eve_name, eve_date, eve_place,eve_desc FROM         EventDetails WHERE eve_date >= CONVERT(datetime, '@dtp',101),con);
  da=new SqlDataAdapter(cmd);
  cmd.Parameters.AddWithValue("@dtp", DateTime.Now.ToShortDateString());
  ds=new DataSet();
  da.fill(ds);

  //Further Processing

}
catch(Exception ex)
{
   MessageBox.Show(ex.Message);
}

這會奏效。

暫無
暫無

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

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