Sql 根据修改的日期填写月份日期
我正在尝试生成名为month的附加列,并创建附加记录来填充全年的月份 这是原始数据的示例Sql 根据修改的日期填写月份日期,sql,sql-server,Sql,Sql Server,我正在尝试生成名为month的附加列,并创建附加记录来填充全年的月份 这是原始数据的示例 ID | DateModified ---- | ------------ 123 | 01-01-2020 123 | 11-05-2020 这是理想的结果 ID | DateModified | Month --- | ------------ | ----- 123 | 01-01-2020 |一月 123 | 01-01-2020 | 2月 123 | 01-01-2020 |三月 123 |
ID | DateModified
---- | ------------
123 | 01-01-2020
123 | 11-05-2020
这是理想的结果
ID | DateModified | Month
--- | ------------ | -----
123 | 01-01-2020 |一月
123 | 01-01-2020 | 2月
123 | 01-01-2020 |三月
123 | 01-01-2020 | 4月
123 | 11-05-2020 | 5月
123 | 11-05-2020 | 6月
123 | 11-05-2020 | 7月
123 | 11-05-2020 | 8月
123 | 11-05-2020 | 9月
123 | 11-05-2020 | 10月
123 | 11-05-2020 | 11月
123 | 11-05-2020 | 12月
请建议如何存档这些结果。您可以使用来实现它
UPDATE a
SET a.DateModified = DATEADD(MONTH, b.Month_Value, a.DateModified )
FROM Your_Table a
INNER JOIN MonthValue_AccordingTo_MonthTextTable b ON a.Month = b.Month_Text
更新了答案。我希望这对你有用。。。请注意,它适用于同一年内的日期,而不是跨到下一年
CREATE TABLE wrk(
id int,
DateModified datetime
)
GO
INSERT INTO wrk values(123, '20200101')
INSERT INTO wrk values(123, '20200511')
GO
WITH
months as(
SELECT 1 AS month_idx, 'jan' AS month_key UNION ALL
SELECT 2 AS month_idx, 'feb' AS month_key UNION ALL
SELECT 3 AS month_idx, 'mar' AS month_key UNION ALL
SELECT 4 AS month_idx, 'apr' AS month_key UNION ALL
SELECT 5 AS month_idx, 'may' AS month_key UNION ALL
SELECT 6 AS month_idx, 'jun' AS month_key UNION ALL
SELECT 7 AS month_idx, 'jul' AS month_key UNION ALL
SELECT 8 AS month_idx, 'aug' AS month_key UNION ALL
SELECT 9 AS month_idx, 'sep' AS month_key UNION ALL
SELECT 10 AS month_idx, 'oct' AS month_key UNION ALL
SELECT 11 AS month_idx, 'nov' AS month_key UNION ALL
SELECT 12 AS month_idx, 'dec' AS month_key
),
w as(
SELECT
w.id, w.DateModified,
--
datepart(month, w.DateModified) AS MonthModifiedFrom,
--
isnull(
datepart(
month,
min(w_next.DateModified)
) - 1,
12 /* December */
) AS MonthModifiedTo
FROM
wrk w
LEFT OUTER JOIN wrk w_next
ON(
w_next.id = w.id
AND w_next.DateModified > w.DateModified
)
GROUP BY w.id, w.DateModified
)
SELECT
w.id, w.DateModified, m.month_key
FROM
w
INNER JOIN months m
ON m.month_idx BETWEEN w.MonthModifiedFrom AND w.MonthModifiedTo
请告诉我们您使用的是哪一版本的SQL(例如MySQL、SQL Server、Oracle等)。请更新您的问题以了解更多详细信息?是否要根据
DateModified
添加更多列Month
?因为您的示例数据非常清楚@SerentityEnd我使用的是MS SQL,对不起,这是我的第一篇文章。是的,尝试创建一个名为“月”的新列和显示一月到十二月的附加记录。更新不会生成新的行。问题似乎不太清楚,先生,我已经添加了更多的细节,但是更新并不能解决问题。但是,第一个日期是2020-01-01,它从2月到12月填充。有一种方法可以限制填充到5月。非常感谢。