如何将具有特定时间的当前日期分配给列?

时间:2013-01-03 09:36:47

标签: sql sql-server sql-server-2005 datetime ssis

如何指定特定时间的当前日期?

让我们说上午8:00:00到数据类型datetime的列EXIT_DT?

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

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

6 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分: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格式。

答案 2 :(得分:0)

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

例如:

SELECT CONVERT(VARCHAR(30),GETDATE(),113) 

答案 3 :(得分:0)

这有点愚蠢,但它有效

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

它会将getdate()转换为date,从而失去小时数,而不是将其投放到datetime并增加8小时。

如果您想避免将varchar隐式转换为datetime,可以使用此版本:

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

答案 4 :(得分: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。

答案 5 :(得分: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
/