SQL查询中的日期

3
这可能是一个非常简单的问题。
我在Excel中有一个非常基本的查询,从Sql Server 2008 R2上的数据库中拉取一些值。
这个数据库中的日期字段存储为datetime。在这个查询中,我不关心时间部分,只想选择日期。我尝试使用Cast或Convert,但两者都将sql中的日期(yyyy-mm-dd)返回到Excel中。Excel将其识别为文本而不是日期,因此一旦数据进入Excel,我无法进行日期过滤。
如果我在Excel中使用datepart(),它会显示为日期,我可以按预期进行过滤,但我希望直接从查询中返回的数据作为Excel可以过滤的日期值。
以下是我的示例查询:
SELECT order_header.oh_id, 
order_header.oh_order_number, 
order_header.oh_datetime, 
convert(date, order_header.oh_datetime, 103) as 'ConvertOrderDate',
cast(order_header.oh_datetime as date) as 'CastOrderDate'
FROM order_header
WHERE order_header.oh_datetime >= '2013-09-01'

当将其返回到Excel时,返回的内容如下所示:

输出图像 http://img834.imageshack.us/img834/4417/7gbg.png


1
在进行转换/强制类型转换为“date”时,请尝试更改为“datetime”。 - T I
1
我讨厌Excel的日期识别功能:它似乎总是猜错。如果我想要文本或数字,它会认为它是一个日期。如果我想要一个日期,它却看不到它。 - Joel Coehoorn
1个回答

1

我实际上在不进行任何奇怪操作的情况下找到了答案 :)

SELECT order_header.oh_id, 
order_header.oh_order_number, 
order_header.oh_datetime, 
DATEADD(dd, DATEDIFF(dd, 0, order_header.oh_datetime), 0) as 'OrderDate'
FROM order_header
WHERE order_header.oh_datetime >= '2011-09-01'

这将返回一个日期时间,但是时间部分为00:00,因此我可以在Excel中轻松地进行格式化。

并非所有文化都能“消耗”您的破折号时间。“20110901”更好一些。 - alerya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接