如何解决如果日期分别为29,30和31,则转换日期为下个月
我有一个表,其日期字段的数据类型为INT
Date
20140430
20140514
20140508
格式为YYYYMMDD
现在我需要将日期格式转换为YYYY-MM-DD
如果DD = 29,30和31,它将自动移动下个月的第一天
例如
case when date = 20140430 then '2014-05-01'
解决方法
您可以使用DAY()
来获取每月的日期,然后使用EOMONTH
来获取月份的最后日期。加上1天即可获得下个月的第一天
CASE WHEN DAY(DateCol) in (29,30,31)
THEN DATEADD(DAY,1,EOMONTH(DateCol))
ELSE DateCol
END
,
正如您所描述的,您可以使用一个简单的CASE来解决它...但是,也许您只想将月份的最后一天切换到下个月的第一天?在这种情况下,您可以稍作修改,以评估日期和下个月第一天之间的DATEDIFF。无论如何,以我提到的案例为例:
WITH cte AS(
SELECT 20140430 AS d
UNION ALL
SELECT 20140514
UNION ALL
SELECT 20140508
),cteDate AS(
SELECT CAST(CAST(d AS NVARCHAR(8)) AS DATE) AS MyDate
FROM cte
)
SELECT *,CASE WHEN DATEPART(d,MyDate) IN (29,31) THEN DATEADD(d,-1 * ( DATEPART(d,MyDate) - 1),DATEADD(MONTH,MyDate)) ELSE MyDate END AS MyNewDate
FROM cteDate
,
CREATE TABLE #CAL ([Date] INT)
INSERT INTO #CAL VALUES
(20140430),(20140514),(20140508)
GO
SELECT
[Date],CONVERT(varchar(10),[Date],101),-- convert to date
CASE when day(CONVERT(varchar(10),101))> 28
THEN DATEADD(month,DATEDIFF(month,101))+1,0)
ELSE CONVERT(varchar(10),101) END
FROM #CAL
DROP TABLE #CAL
输出
Date (No column name) (No column name)
20140430 20140430 2014-05-01 00:00:00.000
20140514 20140514 2014-05-14 00:00:00.000
20140508 20140508 2014-05-08 00:00:00.000
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。