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 + "%'";