首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server datetime如select?

SQL Server datetime如select?
EN

Stack Overflow用户
提问于 2009-10-27 14:31:51
回答 9查看 319.3K关注 0票数 103

在MySQL中

代码语言:javascript
复制
select * from record where register_date like '2009-10-10%'

SQL Server中的语法是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-10-27 15:01:55

您可以使用DATEPART()函数

代码语言:javascript
复制
SELECT * FROM record 
WHERE  (DATEPART(yy, register_date) = 2009
AND    DATEPART(mm, register_date) = 10
AND    DATEPART(dd, register_date) = 10)

我发现这种方法很容易读懂,因为它忽略了时间部分,而且您不必使用第二天的日期来限制您的选择。您可以通过添加额外的子句,使用适当的DatePart代码来达到更高或更小的粒度,例如

代码语言:javascript
复制
AND    DATEPART(hh, register_date) = 12)

以获取在12和1之间创建的记录。

有关有效参数的完整列表,请参阅MSDN DATEPART docs

票数 148
EN

Stack Overflow用户

发布于 2009-10-27 14:37:08

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

代码语言:javascript
复制
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'

MSDN docs中查看CONVERT函数中可用“样式”的完整列表。

Marc

票数 64
EN

Stack Overflow用户

发布于 2009-10-27 14:37:35

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

代码语言:javascript
复制
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上有索引),而不是表扫描。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1629050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档