2013-09-23 76 views
3

这可能是一个非常简单的问题。来自SQL查询的日期

我在Excel中有一个非常基本的查询,它从Sql Server 2008 R2的数据库中提取了一些值。

此分区中的日期字段存储为日期时间。在这个查询中,我对时间部分不感兴趣,所以只想选择日期。我曾尝试使用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,这是正在返回什么:

Output Image http://img834.imageshack.us/img834/4417/7gbg.png

+1

你在哪里转换/转换为'日期'尝试将其改为'日期时间' –

+1

我讨厌Excel的日期识别:它似乎总是猜错了。如果我想要文本或数字,它会认为它是一个日期。如果我想要一个约会,它不会看到它。 –

回答

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中对其进行格式化。

+0

不是所有的文化都能'吃'你的虚度时光。 '20110901'好一点 – alerya