一种在没有秒的情况下从DateTime值数据中提取的方法

时间:2012-01-17 14:51:03

标签: sql sql-server datetime

我有一个sql DateTime(ms sql server),想要在没有秒的情况下提取相同的日期: 例如2011-11-22 12:14:58.000成为:2011-11-22 12:14:00.000

我该怎么做?我正在考虑将DATEADDDATEPART结合使用,但似乎非常容易出错(除了性能问题)

8 个答案:

答案 0 :(得分:46)

SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable

如果您不希望数据类型之间转换缓慢,这将是有效的。

答案 1 :(得分:22)

试试这个:

 SELECT CAST(CONVERT(CHAR(16), '2011-11-22 12:14',113) AS datetime)

答案 2 :(得分:2)

日期和时间需要仔细,不要转换为TEXT。

我的个人解决方案:

    CREATE FUNCTION [dbo].[fnDateTimeTruncated]
(
    @datetime DATETIME
)
RETURNS DATETIME
AS
BEGIN
    RETURN DATETIMEFROMPARTS ( year(@datetime), month(@datetime), day(@datetime), DATEPART(hh,@datetime), DATEPART(mi,@datetime), 0, 0)
END

编辑:

关于http://blog.waynesheffield.com/wayne/archive/2012/03/truncate-a-date-time-to-different-part/,DateAdd具有更好的性能。 感谢t-clausen.dk

答案 3 :(得分:1)

DECLARE @TheDate DATETIME
SET @TheDate = '2011-11-22 12:14:58.000'

DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0)

在查询中

/* ...all records in that minute; index-friendly expression */ 
WHERE TheDate BETWEEN DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0) 
                  AND DATEADD(mi, DATEDIFF(mi, 0, @TheDate) + 1, 0)

答案 4 :(得分:1)

如果没有毫秒,那么

DECLARE @dt datetime2 = '2011-11-22 12:14:58.000';
DECLARE @goalDt datetime2 = DATEADD(second,-DATEPART(second,@dt), @dt);

要删除毫秒部分,请添加

SET @goalDt = DATEADD(millisecond,-DATEPART(millisecond,@goalDt ), goalDt dt);

答案 5 :(得分:1)

稍微摆弄一下,这似乎运作良好:

SELECT CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
  

结果:2011-11-22 12:14

我在查询中使用它作为选择列表的一部分的确切方式:

,CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
+ '    (UTC +0)' AS [TIME]
  

给我结果:2017年12月15日06:43(UTC + 0)

答案 6 :(得分:1)

在SQL Server 2014中,您可以为此使用“格式”功能。

例如。

 declare @Startdate datetime = '2020-11-07 15:27:50.713'

 set  @Startdate = Convert(datetime,FORMAT(@Startdate, 'yyyy-MM-dd HH:mm'))


> Result is 
2020-11-07 15:27:00.000

答案 7 :(得分:0)

四舍五入:

{
  "NotebookApp": {
    "nbserver_extensions": {
    }
  },
  "KernelSpecManager": {}
}

要截断:

DECLARE @TheDate DATETIME
SET @TheDate = '2019-1-2 12:14:58.400'

SELECT CAST(@TheDate AS SMALLDATETIME)