Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据修改的日期填写月份日期_Sql_Sql Server - Fatal编程技术网

Sql 根据修改的日期填写月份日期

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 |

我正在尝试生成名为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 | 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月。非常感谢。