在MySQLSQL Server datetime LIKE select?
select * from record where register_date like '2009-10-10%'
什麼是SQL Server的語法?
謝謝。
在MySQLSQL Server datetime LIKE select?
select * from record where register_date like '2009-10-10%'
什麼是SQL Server的語法?
謝謝。
您可以使用DATEPART()函數
SELECT * FROM record
WHERE (DATEPART(yy, register_date) = 2009
AND DATEPART(mm, register_date) = 10
AND DATEPART(dd, register_date) = 10)
我覺得這種方式很容易讀,因爲它忽略了時間的組件,你不必使用第二天的日期限制你的選擇。您可以通過添加額外的子句,使用適當的DatePart代碼(例如,
AND DATEPART(hh, register_date) = 12)
得到記錄由12和1之間
獲取有效參數的完整列表,請查閱MSDN DATEPART docs。
如果存在索引寄存器日期,這將完全忽略索引和性能將受到影響。可能相當糟糕。 – 2009-10-27 08:19:14
好的,但它確實避免了使用相當日期後一天的字符串的問題,這是在這裏的幾個答案中提出的。棘手的日期是該月的月底或年份。 – 2009-10-27 10:46:05
+1爲什麼這是downvoted? – Andomar 2009-10-27 14:14:01
有針對DATETIME的變量,比如運營商不直接支持,但你總是可以投的DATETIME爲VARCHAR:
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
檢查MSDN docs爲在CONVERT功能提供「風格」的完整列表。
Marc
在我看來,處理日期時間的最不希望的方式是...... – 2009-10-27 07:35:05
同意 - 但OP要求一種方式來處理日期時間與LIKE ....但我同意 - 日期時間最好應該處理的範圍如> =和<=或BETWEEN - 更好的方法 – 2009-10-27 08:15:00
謝謝大家。對不起,我只是SQL的新手。 – Paisal 2009-10-28 07:39:06
如果你這樣做,你迫使它做一個字符串轉換。這將是更好地建設一個開始/結束日期範圍,並使用:
declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
and register_date < @end
這將允許它使用索引(如果有一個上register_date
),而不是表掃描。
謝謝。對不起,我只是SQL的新手。 – Paisal 2009-10-28 07:36:14
您可以使用CONVERT以文本形式獲取日期。如果將其轉換爲varchar(10),您可以使用=代替,如:
select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
或者你可以使用上下邊界日期,有額外的好處,它可以使使用索引:
select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
您也可以使用轉換來使日期搜索使用LIKE。例如,
select convert(VARCHAR(40),create_date,121) , * from sys.objects where convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
SQL Server中日期的LIKE運算符有一個非常片狀的覆蓋範圍。它只能使用美國的日期格式。舉個例子,你可以嘗試:
... WHERE register_date LIKE 'oct 10 2009%'
我在SQL Server 2005中測試這和它的作品,但你真的需要嘗試不同的組合。我注意到奇怪的事情是:
你只能似乎得到的日期內不同的子領域,全有或全無,例如,如果你搜索「4月2日%」,你只能得到20的東西 - 它省略了2nd。
使用單下劃線「_」代表單(通配符)字符並不完全工作,例如WHERE mydate LIKE 'oct _ 2010%'
將不回報所有日期前的10日 - 它返回什麼都沒有,事實上!
格式是剛性的美國人:「mmm dd yyyy hh:mm
」
我發現很難敲定爲LIKEing秒的過程,因此,如果有人想遠一點藉此,是我的客人!
希望這會有所幫助。
不幸的是,使用'LIKE'不能比較datetime和varchar 但是另一種方式可能需要輸出。
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
這對我有用。非常感謝 – 2017-11-18 05:47:46
的LIKE
運營商不會與日期部分,如一個月或日工作,但DATEPART
操作一樣。
的命令找出其開放日期是1日的所有帳戶:
SELECT *
FROM Account
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
*鑄造OpenDt
,因爲它的價值是在DATETIME
而不僅僅是DATE
。
我解決了我的問題。感謝您提出改進建議。 C#中的示例。
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";
你究竟想要檢查什麼?給定的日期時間有給定的日期部分?或者是其他東西? – 2009-10-27 08:17:52
對於這個問題的健康討論(包括爲什麼把'DATETIME'值視爲字符串不好,以及爲什麼它可能不好使用'BETWEEN'或'> = AND <='),請參閱[本博客由Aaron Bertrand] (http://is.gd/4EgDF)。 – 2009-10-27 13:14:25
你的問題對於[tag:like-operator]標籤至少有5票。我可否請求你建議[標籤:sql-like]作爲[同義詞](http://stackoverflow.com/tags/like-operator/synonyms)? – Kermit 2013-04-02 18:38:38