无日期的日期

问题描述:

我正在使用SQL Server 2005.无日期的日期

我有一个名为purchase_time的类型为datetime的列。如何选择时间部分的这一列 - 只是日期。

感谢,

巴里

编辑: 难道是安全的,得到的日期时间,并通过Python的第一空间分割,或者是这种格式依赖于语言环境?

在版本< 2008年(其中,基于其他意见,一些问题的答案,我相信你正在运行),最有效的方法是将它保留为日期时间类型并使用日期数学来避免字符串转换。

SELECT DATEADD(DAY, DATEDIFF(DAY, '20000101', purchase_time), '20000101') 
    FROM dbo.table; 

编辑

如果希望只为显示目的的日期,而不是计算或分组,这可能是最好的客户端处理。你可以简单地说这样做在SQL:

SELECT dt = CONVERT(CHAR(10), purchase_time, 120) 
    FROM dbo.table; 
+0

感谢一个可能的解决方案!这给了我:2012-02-22 00:00:00.000但我不想要00:00:00.000部分。 – Baz 2012-02-22 18:52:30

+0

+1不错 - 这必须比我的转换x3解决方案更好。 – GolfWolf 2012-02-22 18:56:27

+0

@Baz请参阅更新。只要确保你保持计算和演示为单独的概念。让SQL Server“清理”显示数据的肮脏工作并不总是最好或最有效的。 – 2012-02-22 18:59:10

在SQL Server 2008中您可以使用新添加的date类型:

select convert(date, purchase_time) from TableName 

更新:

在之前的版本SQL 2008,我用这个问题的以下解决方案:

select convert(datetime, convert(int, convert(float, purchase_time))) 
from TableName 
+0

这将是比使用转换为CHAR/VARCHAR修剪的时间更高效的(你可以测试这个,我有)。如果需要对结果执行日期数学或其他比较,它会否定隐式转换(或其他包装转换)。 – 2012-02-22 18:40:27

+0

类型日期不是定义的系统类型。 – Baz 2012-02-22 18:41:51

+0

@Baz我相信它在SQL 2008中可用;我只是测试它 – GolfWolf 2012-02-22 18:42:57