我有以下疑问:
DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME
SET @StartDateTime = '2015-01-01'
SET @EndDateTime = '2016-01-12';
WITH DateRange(DateData) AS
(
SELECT @StartDateTime as Date
UNION ALL
SELECT DATEADD(m,1,DateData)
FROM DateRange
WHERE DateData < @EndDateTime
)
SELECT DateData
FROM DateRange
OPTION (MAXRECURSION 0)
它以以下格式显示该月的第一天:
yyyy-mm-dd hh:mm:ss:mmm
如何更新上面的查询以使其显示:
MM-dd-yyyy
谢谢。
您可以使用
EOMONTH
功能。请注意,您仍然应该从该月的第一天开始递增,否则可能会遇到问题。
DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME
SET @StartDateTime = '2015-01-01'
SET @EndDateTime = '2016-01-12';
WITH DateRange(DateData) AS
(
SELECT EOMONTH(@StartDateTime) as Date, @StartDateTime AS StartOfMonth
UNION ALL
SELECT EOMONOTH(DATEADD(m, 1, StartOfMonth))
FROM DateRange
WHERE DateData < @EndDateTime
)
SELECT DateData
FROM DateRange
OPTION (MAXRECURSION 0)
递归很慢。
GENERATE_SERIES
或其他一些数字生成器可能更好。 EOMONTH
还提供了增量参数,这意味着你不需要DATEADD
DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME
SET @StartDateTime = '2015-01-01'
SET @EndDateTime = '2016-01-12';
SELECT
EOMONTH(@StartDateTime, g.value) AS DateData
FROM GENERATE_SERIES(0, DATEDIFF(month, @StartDateTime, @EndDateTime)) g;
格式不应该是相关的,这纯粹是一个显示/演示的事情。但如果您确实需要对日期进行字符串化,则可以使用
CONVERT(varchar(10), yourDate, 110)
。