如何在T-Sql中从日期时间中提取日期?

8

我正在SQL Server 2005中运行针对datetime列的select查询。我只能从这个datetime列中选择日期吗?

6个回答

8

最佳方法是:

   SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0) 

这是因为在内部,SQL Server将所有日期都存储为两个整数,其中第一个是自1900年1月1日以来的天数。 (第二个是时间部分,存储为从午夜以来的秒数。 )(对于SmallDateTime,是秒,对于DateTime是毫秒)
使用上述表达式更好,因为它避免了所有转换,直接读取和访问日期内部表示中的第一个整数,而无需执行任何处理... 上述表达式中的两个零(表示1900年1月1日)也可以直接使用,不需要处理或转换,因为它们与SQL Server内部表示的日期1 jan 1900完全匹配(作为一个整数)。

*注意。 实际上,您必须跨越的日期边界(午夜)数量从一个日期到另一个日期不同。


我在查看答案之前就想出来了,但这是我走的路线,而且它完美地运行了。 - Tyson Nero

7
可以使用convert函数进行转换。例如:
select getdate(), convert(varchar(10),getdate(),120)

结果:

----------------------- ----------
2010-05-21 13:43:23.117 2010-05-21

1

您可以使用以下函数:

  1. day(date)
  2. month(date)
  3. year(date)

时间部分是否有类似的函数?例如hour(date),minute(date)。谢谢。 - curiousBoy

1

1

0
DECLARE @dToday DATETIME
SET @dToday = CONVERT(nvarchar(20), GETDATE(), 101)
SELECT @dToday AS Today

这将返回今天的日期,时间为12:00am:'2010-05-21 00:00:00.000' 然后您可以根据需要在查询中使用@dToday变量


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