仅选择';月日时间';SQL中的from Datetime字段(服务器2012)
我正在考虑在案例陈述中将特定日期更改为不同的日期,但是,我只希望它适用于一天、一个月和一个时间 例如,我想让案例陈述将31/12@23:59:00的任何日期更改为01/01@00:00:00,但除非我写的案例包括未来40年的每年,否则我无法解决这个问题 我在英国写这篇文章,日期格式为dd/mm/yyyy(上面的例子是12月31日和1月1日)仅选择';月日时间';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
数据库中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
来存储数据?如果是这样,那是你的第一个错误。