You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server存储过程中插入仅含年月的DATETIME值?

在SQL Server存储过程中实现年月转固定日的DATETIME插入

要把输入的月份和年份转换成固定1号的DATETIME值插入,有几种简单可靠的方法,根据你的SQL Server版本选择即可:

方法一:使用DATEFROMPARTS(推荐,SQL Server 2012及以上版本)

这个函数专门用来拼接年月日生成日期,直接指定日为1就行,语法清晰不易出错:

CREATE PROCEDURE InsertDateFromYearMonth
    @Year INT,
    @Month INT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @TargetDate DATETIME;
    -- 生成当月1号的datetime值
    SET @TargetDate = DATEFROMPARTS(@Year, @Month, 1);

    -- 替换成你的表名和列名
    INSERT INTO YourTableName(YourDatetimeColumn)
    VALUES(@TargetDate);
END

方法二:字符串拼接转换(兼容低版本SQL Server)

如果你的SQL Server版本低于2012,可以用字符串拼接成YYYY-MM-01格式,再转换成DATETIME:

CREATE PROCEDURE InsertDateFromYearMonth
    @Year INT,
    @Month INT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @TargetDate DATETIME;
    -- 拼接成日期字符串再转换
    SET @TargetDate = CAST(CONCAT(@Year, '-', @Month, '-01') AS DATETIME);

    -- 替换成你的表名和列名
    INSERT INTO YourTableName(YourDatetimeColumn)
    VALUES(@TargetDate);
END

方法三:使用CAST和DATEADD组合

另一种兼容低版本的写法,先基于基准日期,通过年份和月份偏移生成目标日期:

CREATE PROCEDURE InsertDateFromYearMonth
    @Year INT,
    @Month INT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @TargetDate DATETIME;
    -- 从1900-01-01开始,偏移到目标年月的1号
    SET @TargetDate = CAST(DATEADD(MONTH, (@Year - 1900) * 12 + @Month - 1, 0) AS DATETIME);

    -- 替换成你的表名和列名
    INSERT INTO YourTableName(YourDatetimeColumn)
    VALUES(@TargetDate);
END

测试时执行EXEC InsertDateFromYearMonth 2023, 7,就能将2023-07-01 00:00:00.000插入指定列。

内容的提问来源于stack exchange,提问作者kocebob436

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:04:55