SQL Server datetime LIKE select?
在MySQL中
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)
我发现这种方式很容易阅读,因为它忽略了时间组件,并且您不必使用第二天的date来限制您的select。 您可以通过添加额外的子句,使用适当的DatePart代码,例如更大或更小的粒度
AND DATEPART(hh, register_date) = 12)
获取12到1之间的logging。
请参阅MSDN DATEPART文档以获取有效参数的完整列表。
对DATETIMEvariables没有直接支持LIKE运算符,但是您始终可以将DATETIME转换为VARCHAR:
SELECT (list of fields) FROM YourTable WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
查看MSDN文档以获取CONVERT函数中可用“样式”的完整列表。
渣子
如果你这样做,你迫使它进行string转换。 build立开始/结束date范围会更好,并使用:
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
上有一个),而不是表扫描。
您可以使用CONVERT以文本forms获取date。 如果你把它转换成一个varchar(10),你可以使用=而不是像:
select * from record where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
或者,您可以使用上下限边界date,还可以使用索引来增加优势:
select * from record where '2009-10-10' <= register_date and register_date < '2009-10-11'
不幸的是,使用'LIKE'来比较datetime和varchar是不可能的,但是可以用另一种方式来理想的输出。
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
您还可以使用转换来使datesearch使用LIKE。 例如,
select convert(VARCHAR(40),create_date,121) , * from sys.objects where convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
SQL Server中date的LIKE运算符的覆盖范围非常广泛。 它只能使用美国的date格式。 作为一个例子,你可以尝试:
... WHERE register_date LIKE 'oct 10 2009%'
我已经在SQL Server 2005中testing过了,它可以工作,但是你真的需要尝试不同的组合。 我注意到的奇怪的事情是:
-
你似乎只能在date内获得不同的子领域的全部或全部,例如,如果你search'apr 2%',你只能得到20世纪的任何东西 – 它会省略2。
-
使用单个下划线“_”来表示单个(通配符)字符并不完全适用,例如,
WHERE mydate LIKE 'oct _ 2010%'
将不会返回第10个之前的所有date – 实际上它什么也不返回! -
格式是严格的美国:'
mmm dd yyyy hh:mm
'
我发现很难确定一个喜欢秒的过程,所以如果有人想要进一步这样做,请成为我的客人!
希望这可以帮助。
LIKE
运算符不适用于月份或date等date部分,但是DATEPART
运算符可以。
命令查找所有开放date为1日的帐户:
SELECT * FROM Account WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
* CASTING OpenDt
因为它的值是在DATETIME
而不仅仅是DATE
。
我这样解决了我的问题。 感谢您提出改进build议。 在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 + "%'";