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

自定义日期转月份名标量函数调用时出现日期转换错误如何解决?

问题解决方法

一、修复函数代码中的错误

你的函数存在参数引用错误,month('@date')里的单引号把参数变成了字符串字面量,而非传入的日期值,同时也没必要先提取月份再格式化。修正后的函数代码如下:

create function getmonth
    (@date date)
returns varchar(20)
begin
    return format(@date, 'mmmm')
end

简化后直接返回格式化结果,无需额外声明变量。如果需要兼容不支持FORMAT函数的旧版本SQL Server,可以用DATENAME函数替代:

create function getmonth
    (@date date)
returns varchar(20)
begin
    return datename(month, @date)
end

二、修正调用时的日期格式问题

调用时传入的'3.1.2023'属于非标准日期格式,SQL Server无法自动解析,导致转换失败。有两种解决方式:

  • 使用ISO标准日期格式(推荐,不受语言/区域设置影响):
    select dbo.getmonth('2023-03-01')
    
  • 指定格式转换后传入:
    如果你的输入格式是日.月.年(比如3.1.2023代表2023年1月3日),用CONVERT函数指定格式代码104:
    select dbo.getmonth(CONVERT(date, '3.1.2023', 104))
    
    如果是月.日.年(3.1.2023代表2023年3月1日),先替换分隔符再用格式代码101:
    select dbo.getmonth(CONVERT(date, REPLACE('3.1.2023', '.', '/'), 101))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:28