[英]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.