我想:如何在SQL Server中查詢大於特定日期的所有日期?
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
樣子:2010-03-04 00:00:00.000
但是,這是行不通的。任何人都可以提供一個參考爲什麼?
我想:如何在SQL Server中查詢大於特定日期的所有日期?
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
樣子:2010-03-04 00:00:00.000
但是,這是行不通的。任何人都可以提供一個參考爲什麼?
select *
from dbo.March2010 A
where A.Date >= Convert(datetime, '2010-04-01')
在您的查詢,2010-4-01
被視爲一個數學表達式,所以它在本質上閱讀
select *
from dbo.March2010 A
where A.Date >= 2005;
(2010 minus 4 minus 1 is 2005
將其轉換爲適當datetime
,並使用單引號將修復這個問題。)
從技術上講,解析器可能允許你脫身
select *
from dbo.March2010 A
where A.Date >= '2010-04-01'
它會做轉換爲你,但在我看來,這是不是明確轉換爲DateTime
爲維護程序員會來找你的可讀性。
顯式轉換是沒有必要的。另外我強烈建議使用YYYYMMDD而不是YYYY-MM-DD。爲什麼?那麼,用'SET LANGUAGE FRENCH'試試你的代碼。 :-)那天你會得到1月4日而不是4月1日。對於其他日期,你可能會得到一個錯誤。 –
@Aaron Bertrant - 我的答案確實包括了轉換不是必須的,從「從技術上講,pareser可能讓你逃避
@AaronBertrand,我不得不使用你的建議與上述答案結合:'CONVERT(datetime,'20100401 10:01:01')' - 傳遞2010-04-01在SQL Server Management Studio中工作,但不當通過PHP/MSSQL發送SQL語句時 – paperclip
試着把你的日期放入一個字符串中。
select *
from dbo.March2010 A
where A.Date >= '2010-04-01';
添加時間會給出確切的結果:其中A.Date> = 2014-01-12 12:28:00 – stom
DateTime start1 = DateTime.Parse(txtDate.Text);
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= start1;
先轉換成TexBox日期時間,然後....使用該變量到查詢
我們可以使用如下以及
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';
修改過濾器謂詞列不是一個好主意,它幾乎可以完全防止索引使用。 – pimbrouwers
把單引號周圍 –
除引號,我建議您始終使用安全且明確的格式來保存僅限日期的字符串文字。我唯一信任的是YYYYMMDD。看到我的評論,大衛的答案爲什麼...... –