自定义日期转月份名标量函数调用时出现日期转换错误如何解决?
问题解决方法
一、修复函数代码中的错误
你的函数存在参数引用错误,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
相关产品推荐
相关产品推荐

