【发布时间】:2010-11-10 14:55:29
【问题描述】:
我在 SQL 中有一个 DateTime 类型的变量。 只需要 Date 的一部分。
请帮忙?
【问题讨论】:
-
以后请说明您正在使用的数据库引擎和版本。
标签: sql-server tsql datetime date
我在 SQL 中有一个 DateTime 类型的变量。 只需要 Date 的一部分。
请帮忙?
【问题讨论】:
标签: sql-server tsql datetime date
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
结果是:“2009-07-14 00:00:00.000”
编辑:猜测下一个变种更常见:
SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)
因为day 模式可以轻松更改为week 或month 模式。当GROUP BY 子句按月(报告)分组时,它非常有用。
【讨论】:
【讨论】:
使用Google找到这个
SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, GETDATE())))
【讨论】:
如果您只需要日期的 varchar 表示,您可以使用 convert 函数,例如
select convert(varchar, getDate(), 102) /* 2009.07.14 */
如果您需要日期时间(给定日期的午夜),您可以将其转换回来。
select convert(datetime, convert(varchar, getDate(), 102), 102)
【讨论】:
-- Sneaky CAST/DATEDIFF trick strips off the time to get just the day (midnight)!
CAST(DATEDIFF(d,0,DateField) AS DATETIME) AS DayField
【讨论】:
SQL Server 2008 有一个日期数据类型,它只存储日期,如果你在这个版本中,也许这会是一个更好的数据类型供你使用。但请注意,Date 的工作方式与数据操作的日期时间不同。
【讨论】:
SELECT DATEADD(day, DATEDIFF(day, '19900101', CURRENT_TIMESTAMP), '19900101')
一篇很有用的文章: “本文的目的是解释日期时间类型在 SQL Server 中的工作原理,包括常见的陷阱和一般建议。”The ultimate guide to the datetime datatypes
请注意,转换为 varchar 并返回 (convert(datetime, convert(varchar, getDate(), 102), 102)) 要慢得多。
【讨论】:
如果您想要格式 'MM/DD/YY',请使用 "CONVERT(varchar, @datetimevalue, 1) 仅显示日期。如果您需要日期时间格式,请使用 "CONVERT(datetime, CONVERT(varchar , @datetimevalue, 1))"。
我在我的 SQL 博客中创建了一个关于如何检索和显示 CONVERT(varchar, ..) 函数的所有可能格式的条目:
http://jessesql.blogspot.com/2009/04/converting-datetime-values-to-varchar.html
【讨论】:
提示: 如果您发现自己经常这样做,您可以创建一个标量用户定义函数,其中包含您选择的时间剥离逻辑。
请注意:SQL Server 2000 在ON 子句中存在一些涉及 UDF 的痛苦错误。
【讨论】:
日期部分(天,日期时间值)
【讨论】: