在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中查找最多的话题。
更新 澄清了例子,使之更加具体。
编辑抱歉,但我不得不将错误的答案(返回错误结果的答案)向下修改。
@Jorrit: WHERE (date>'20080813' AND date<'20080815')
将返回13日和14日。
@wearejimbo:接近了,但还没有!授予你的徽章。你漏掉了写于14/08/2008 23:59:001至23:59:999的记录(即午夜前不到1秒。)
技巧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'上的任何索引,如果它存在的话。
SELECT *
FROM table1
WHERE CONVERT(varchar(10),columnDatetime,121) =
CONVERT(varchar(10),CONVERT('14 AUG 2008' ,smalldatetime),121)
这将把数据时间和字符串转换成格式为"YYY-MM-DD"的varchars。
这很难看,但应该能行