2011-09-26 94 views
3

我想从getdate()保存日期(例如:2011/09/26 00:00:00)。我使用SQL Server 2005的仅在数据库中插入日期

我的SQL查询将是这样的:

Insert into Merchant(startdate) 
values **today's date only** 

这怎么可能?

+0

所以你想总是使用2011/09/26 00:00:00作为你的日期,对吧?保持2011/09/26 00:00:00为下周和下个月等? – Coffee

+0

它应该取决于日期。马丁帮助了我。感谢您检查Adel :-) – Rem

回答

4
INSERT INTO Merchant 
(startdate) 
VALUES (DATEADD(DAY,0,DATEDIFF(DAY,0,GETDATE()))) 
+0

非常感谢Martin! – Rem

+0

我唯一的建议是在插入之前将'GetDate()'加载到变量中。在这种情况下,它只被调用一次,但在其他选择或更新操作中,您不希望为查询中的每一行调用GetDate()数学运算。 –

+0

@Jeff - [这不是必须的](http://blogs.msdn.com/b/conor_cunningham_msft/archive/2010/04/23/conor-vs-runtime-constant-functions.aspx)。如果你使用'SELECT GETDATE()FROM HugeTable',所有的行都会有相同的值,不管SELECT有多长。 –

0
select dateadd(dd,0, datediff(dd,0, GETDATE())) 

但是,如果你移动到SQL2008,我建议您变更列DATE,而不是DATETIME。

+2

我建议远离速记方法 - 例如拼写'DAY'。其他人阅读你的代码会感谢你。背景:http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx –

+0

@AaronBertrand好点,好点安全比对不起。 –

0

你可以尝试这样的事情:

编辑 - 修订以反映午盘后四舍五入。

SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, GETDATE()))) 

这里的另一个之路探寻你可以试试:

SELECT CAST(CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) 
+1

'SELECT CONVERT(DATETIME,CONVERT(INT,GETDATE()))'在中午之后轮次上涨。 –

+0

谢谢。我已经添加了一种替代方法。 –

0

我有点迟到了,但这里是我的2美分:

INSERT INTO Merchant 
(startdate) 
VALUES (cast(GETDATE() as Date)) 

那当然,将只能从SQL Server 2008起作用。但是,我将留下这个答案,以供学习和未来参考。

+0

不适用于SQL Server 2005 –

+0

@MartinSmith嗯,好点。但我想我会编辑并留在这里以备将来参考。为了学习:) –