仅选择';月日时间';SQL中的from Datetime字段(服务器2012)

仅选择';月日时间';SQL中的from Datetime字段(服务器2012),sql,sql-server,datetime,sql-server-2012,Sql,Sql Server,Datetime,Sql Server 2012,我正在考虑在案例陈述中将特定日期更改为不同的日期,但是,我只希望它适用于一天、一个月和一个时间 例如,我想让案例陈述将31/12@23:59:00的任何日期更改为01/01@00:00:00,但除非我写的案例包括未来40年的每年,否则我无法解决这个问题 我在英国写这篇文章,日期格式为dd/mm/yyyy(上面的例子是12月31日和1月1日) 数据库中datetime字段的格式为“datetime”:2019-07-01 13:14:47)。我无法判断您是否希望返回类型为date或datetime

我正在考虑在案例陈述中将特定日期更改为不同的日期,但是,我只希望它适用于一天、一个月和一个时间

例如,我想让案例陈述将31/12@23:59:00的任何日期更改为01/01@00:00:00,但除非我写的案例包括未来40年的每年,否则我无法解决这个问题

我在英国写这篇文章,日期格式为dd/mm/yyyy(上面的例子是12月31日和1月1日)


数据库中datetime字段的格式为“datetime”:2019-07-01 13:14:47)。

我无法判断您是否希望返回类型为
date
datetime
。如果日期为
,则可以执行以下操作:

(case when year(dateadd(minute, 1, datecol)) <> year(datecol)
      then datefromparts(year(datecol) + 1, month(datecol), day(datecol))
      else cast(datecol as date)
 end)

我无法判断您是否希望返回类型为
date
datetime
。如果日期为
,则可以执行以下操作:

(case when year(dateadd(minute, 1, datecol)) <> year(datecol)
      then datefromparts(year(datecol) + 1, month(datecol), day(datecol))
      else cast(datecol as date)
 end)

如果我理解正确的话,你想把一年中最后一分钟内的日期四舍五入到下一年。您可以这样做:

SELECT datecol, CASE
    WHEN MONTH(datecol) = 12 AND DAY(datecol) = 31 AND CAST(datecol AS TIME(3)) >= '23:59:00' THEN CAST(DATEADD(MINUTE, 1, datecol) AS DATE)
    ELSE datecol
END
FROM (VALUES
    (CAST('2018-12-31 23:58:59.997' AS DATETIME)),
    (CAST('2018-12-31 23:59:00.000' AS DATETIME)),
    (CAST('2018-12-31 23:59:59.997' AS DATETIME)),
    (CAST('2019-01-01 00:00:00.000' AS DATETIME))
) AS v(datecol)
结果:

2018-12-31 23:58:59.997    2018-12-31 23:58:59.997
2018-12-31 23:59:00.000    2019-01-01 00:00:00.000
2018-12-31 23:59:59.997    2019-01-01 00:00:00.000
2019-01-01 00:00:00.000    2019-01-01 00:00:00.000

如果我理解正确的话,你想把一年中最后一分钟内的日期四舍五入到下一年。您可以这样做:

SELECT datecol, CASE
    WHEN MONTH(datecol) = 12 AND DAY(datecol) = 31 AND CAST(datecol AS TIME(3)) >= '23:59:00' THEN CAST(DATEADD(MINUTE, 1, datecol) AS DATE)
    ELSE datecol
END
FROM (VALUES
    (CAST('2018-12-31 23:58:59.997' AS DATETIME)),
    (CAST('2018-12-31 23:59:00.000' AS DATETIME)),
    (CAST('2018-12-31 23:59:59.997' AS DATETIME)),
    (CAST('2019-01-01 00:00:00.000' AS DATETIME))
) AS v(datecol)
结果:

2018-12-31 23:58:59.997    2018-12-31 23:58:59.997
2018-12-31 23:59:00.000    2019-01-01 00:00:00.000
2018-12-31 23:59:59.997    2019-01-01 00:00:00.000
2019-01-01 00:00:00.000    2019-01-01 00:00:00.000

日期没有格式。您是否使用
varchar
来存储数据?如果是这样,那是你的第一个错误。日期没有格式。您是否使用
varchar
来存储数据?如果是这样,那是你的第一个错误。