1

如何为当前日期分配特定时间?

假设上午 8:00:00 到数据类型的列 EXIT_DT datetime

我试过GETDATE()AS EXIT_DT 但它给了我当前的日期时间。我正在使用 Sql server 2005。有什么帮助吗?

假设今天是 2013 年 1 月 3 日,我希望我的结果作为日期时间数据类型返回,值为 1/3/2013 8:00:00 AM。如果我运行 ytd 语句,结果将是 1/2/2013 8:00:00 AM

4

6 回答 6

7

此公式将始终在调用当天生成 08:00,并避免字符串操作:

select DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00')

尽量避免与字符串相互转换的解决方案 - 将日期时间值视为字符串是最大的错误来源之一。

它的工作原理是计算自 2001 年 1 月 1 日以来经过的天数(作为整数)。然后将相同的天数添加到 2001 年 1 月 1 日的 08:00。

于 2013-01-03T10:06:39.313 回答
1

你可以试试这个:

DECLARE  @dt datetime;

SET @dt=CONVERT(DateTime, CONVERT(VARCHAR,GETDATE(),101)+' 8:00:00')

SELECT CONVERT(VARCHAR, @dt, 101)+'  '+ LTRIM(RIGHT(CONVERT(VARCHAR(20),@dt, 100), 7))

有关格式,请访问http://www.sql-server-helper.com/tips/date-formats.aspx 。datetime

于 2013-01-03T10:03:05.057 回答
0

使用 Convert 和 getdate() 来获取特定格式。

前任:

SELECT CONVERT(VARCHAR(30),GETDATE(),113) 
于 2013-01-03T09:44:38.433 回答
0

这有点愚蠢,但它有效

select cast(cast(getdate() as date) as datetime) + '08:00:00'

它将 the 投射getdate()date从而失去了几个小时,而不是将它投射到datetime并增加了 8 个小时。

如果你想避免 to 的隐式转换varchardatetime你可以使用这个版本:

select cast(cast(getdate() as date) as datetime) 
     + convert(datetime,'08:00:00',114)
于 2013-01-03T10:09:01.330 回答
0

这也有效。(1)。将今天的日期转换为ISO format (yyyymmdd) (2)。添加时间,(3)。转换回日期时间

Select convert(datetime, convert(varchar, getdate(),112) + ' ' + '8:00:00AM')
--Results
2013-01-03 08:00:00.000

如果您需要特定格式,则需要再次转换回 varchar。

于 2013-01-03T10:14:44.523 回答
0
-- AM/PM --
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH:MI:SS AM') FROM dual
/

-- 24 hrs format --
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH24:MI:SS') FROM dual
/
于 2013-01-03T14:01:35.110 回答