SELECT GETDATE()

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

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

我怎么能得到那个?


当前回答

在这种情况下,仅限日期,我们将运行以下查询:

选择转换(VARCHAR(10),getdate(),111);

其他回答

我赞成以下未提及的内容:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

它也不关心本地或进行双重转换——尽管每个“datepart”可能都做数学运算。因此,它可能比datediff方法慢一点,但对我来说,它更清晰。尤其是当我想按年份和月份分组时(将日期设置为1)。

为什么不使用DATE_FORMAT(your_datetiem_column,'%d-%m-%Y')?

示例:从table_name中选择DATE_FORMAT(some_datetime_column,“%d-%m-%Y”)

您可以通过重新排列“%d-%m-%Y”部分来更改m、d和year的顺序

从SQL Server 2022(16.x)开始,另一个选项是DATETRUNC()函数,使用day作为datepart参数的值:

SELECT DATETRUNC(day, GETDATE());

如果您希望日期显示为2008-09-22 00:00:00.000

然后你可以用

SELECT CONVERT(datetime, (ROUND(convert(float, getdate()-.5),0)))

这将以问题中的格式显示日期

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

例如

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

给了我

2008-09-22 00:00:00.000

赞成的意见:

不需要varchar<->datetime转换无需考虑区域设置