当前位置:  开发笔记 > 数据库 > 正文

将日期字符串与SQL Server中的日期时间进行比较?

如何解决《将日期字符串与SQLServer中的日期时间进行比较?》经验,为你挑选了3个好方法。

在SQL Server中,我有一个DATETIME包含时间元素的列.

例:

'14 AUG 2008 14:23:019'

仅选择特定日期的记录,忽略时间部分的最佳方法是什么?

示例:(不安全,因为它与时间部分不匹配并且不返回任何行)

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT *
FROM   table1
WHERE  column_datetime = @p_date

注意:鉴于这个网站也是关于记下你选择的笔记和技术,然后忘记,我将发布我自己的答案,因为MSSQL中的DATETIME东西可能是我在SQLBOL中查找最多的主题.


更新 Clarified示例更具体.


编辑抱歉,但我不得不降低错误的答案(答案返回错误的结果).

@Jorrit:WHERE (date>'20080813' AND date<'20080815')将返回13日和14日.

@wearejimbo:关闭,但没有雪茄!徽章授予你.您错过了在2008年8月14日23:59:001到23:59:999(即午夜前不到1秒)写下的记录.



1> Guy..:

技巧1:

 DECLARE @p_date DATETIME
 SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

 SELECT  *
 FROM    table1
 WHERE   column_datetime >= @p_date
 AND     column_datetime < DATEADD(d, 1, @p_date)

这样做的好处是,如果它存在,它将使用'column_datetime'上的任何索引.


我相信CAST('2008年8月'作为DateTime)稍好一点.我认为它更具可读性,我相信CAST比CONVERT()更便携,因为CAST()与ANSI SQL-92和-99兼容

2> vzczc..:

在SQL Server 2008中,您可以使用新的DATE数据类型

DECLARE @pDate DATE='2008-08-14'  

SELECT colA, colB
FROM table1
WHERE convert(date, colDateTime) = @pDate  

@Guy.我想你会发现这个解决方案可以很好地扩展.查看原始查询的查询执行计划.

而对于我的:



3> Yaakov Ellis..:

只需比较年,月,日值.

Declare @DateToSearch DateTime
Set @DateToSearch = '14 AUG 2008'

SELECT * 
FROM table1
WHERE Year(column_datetime) = Year(@DateToSearch)
      AND Month(column_datetime) = Month(@DateToSearch)
      AND Day(column_datetime) = Day(@DateToSearch)

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有