SQL Server datetime LIKE选择?

Pai*_*sal 88 sql-server sql-like

在MySQL中

select * from record where register_date like '2009-10-10%'
Run Code Online (Sandbox Code Playgroud)

SQL Server中的语法是什么?

谢谢.

Ral*_*lle 129

您可以使用DATEPART()函数

SELECT * FROM record 
WHERE  (DATEPART(yy, register_date) = 2009
AND    DATEPART(mm, register_date) = 10
AND    DATEPART(dd, register_date) = 10)
Run Code Online (Sandbox Code Playgroud)

我发现这种方式很容易阅读,因为它忽略了时间组件,你不必使用第二天的日期来限制你的选择.您可以通过使用适当的DatePart代码添加额外的子句来获得更大或更小的粒度,例如

AND    DATEPART(hh, register_date) = 12)
Run Code Online (Sandbox Code Playgroud)

获得12到1之间的记录.

有关有效参数的完整列表,请参阅MSDN DATEPART文档.


mar*_*c_s 54

LIKE运算符对DATETIME变量没有直接支持,但您始终可以将DATETIME转换为VARCHAR:

SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
Run Code Online (Sandbox Code Playgroud)

查看MSDN文档以获取CONVERT函数中可用"样式"的完整列表.


Mar*_*ell 10

如果这样做,则强制它进行字符串转换.最好建立一个开始/结束日期范围,并使用:

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
Run Code Online (Sandbox Code Playgroud)

这将允许它使用索引(如果有一个register_date),而不是表扫描.


And*_*mar 7

您可以使用CONVERT以文本形式获取日期.如果将其转换为varchar(10),则可以使用=而不是like:

select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
Run Code Online (Sandbox Code Playgroud)

或者您可以使用上下边界日期,并具有可以使用索引的附加优势:

select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
Run Code Online (Sandbox Code Playgroud)


Dan*_*hew 7

不幸的是,不可能使用'LIKE'将日期时间与varchar进行比较但是可以以另一种方式实现所需的输出.

    select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
Run Code Online (Sandbox Code Playgroud)