SELECT GETDATE()

返回时间:2008-09-22 15:24:13.790

我想要没有时间部分的日期部分:2008-09-22 00:00:00.000

我怎么能得到那个?


当前回答

如果您希望使用CONVERT并获得与所提出的原始问题相同的输出,即yyyy-mm-dd,则使用与前两个答案相同的CONVERT(varchar(10),[SourceDate as dateTime],121)代码,但用虚线转换为yyyy-mm-dd的代码为121。

如果我能马上发表意见,这种格式不属于数据层,这就是为什么在SQL Server 2008引入实际日期部分数据类型之前,如果没有愚蠢的高开销“技巧”是不可能的。在数据层中进行这样的转换是对DBMS开销的巨大浪费,但更重要的是,在执行类似操作的第二秒,基本上已经在内存中创建了孤立数据,我假设您将返回到程序。您不能将其放回另一个3NF+列中,或将其与任何类型的数据进行比较而不进行还原,因此您所做的只是引入了失败点并删除了关系引用。

您应该始终继续并将dateTime数据类型返回给调用程序,在PRESENTATION层中,进行任何必要的调整。一旦在将对象返回给调用者之前进行转换,就会从应用程序中消除引用完整性的所有希望。这将再次阻止UPDATE或DELETE操作,除非您进行某种手动还原,否则在不需要的情况下,再次将数据暴露给人类/code/gremlin错误。

其他回答

好吧,虽然我迟到了:),这是另一个解决方案。

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

后果

2008-09-22 00:00:00.000

如果您使用的是SQL Server 2012或更高版本,则可以使用以下FORMAT()函数-

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

为了获得指示的结果,我使用以下命令。

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

我认为它很有用。

日期(日期和时间字段)和Date_FORMAT(日期和日期,“%Y-%m-%d”)都只返回日期和时间的日期

试试看:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

以上语句将您当前的格式转换为YYYY/MM/DD,请参阅此链接以选择您的首选格式。

如果要将结果分配给列或变量,请为其指定DATE类型,并且转换是隐式的。

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03