我正在尝试创建一个函数,它将根据输入的参数值返回正确的日期格式,但我对语法没有好运。任何人都可以让它工作或有更高效/更好的方式去做这件事吗?
CREATE FUNCTION fn_DateFormat
(
@DateFormat nvarchar(MAX)
)
RETURNS NVARCHAR(30)
AS
BEGIN
SET CASE
WHEN @DateFormat = 'YYYYMMDD'
THEN RETURN CONVERT(nvarchar(30), GETDATE(), 112)
WHEN @DateFormat = 'DD MMM YYYY'
THEN RETURN CONVERT(nvarchar(30), GETDATE(), 106)
ELSE NULL
END
RETURN @DateFormat
END;
GO
我收到以下错误消息:
消息156,级别15,状态1,过程fn_DateFormat,第12行
关键字'CASE'附近的语法不正确。消息156,级别15,状态1,过程fn_DateFormat,第14行
关键字“WHEN”附近的语法不正确。消息156,级别15,状态1,过程fn_DateFormat,第15行
关键字“ELSE”附近的语法不正确。Msg 102,Level 15,State 1,Procedure fn_DateFormat,Line 19
';'附近的语法不正确。
答案 0 :(得分:0)
这是作为独立语句的语法:
SELECT CASE
WHEN @DateFormat = 'YYYYMMDD' THEN CONVERT(nvarchar(30), GETDATE(), 112)
WHEN @DateFormat = 'DD MMM YYYY' THEN CONVERT(nvarchar(30), GETDATE(), 106)
ELSE @DateFormat
END
在上下文中作为udf:
CREATE FUNCTION fn_DateFormat
(
@DateFormat nvarchar(MAX)
)
RETURNS NVARCHAR(30)
AS
BEGIN
declare @ret NVARCHAR(30)
select @ret =
CASE
WHEN @DateFormat = 'YYYYMMDD' THEN CONVERT(nvarchar(30), GETDATE(), 112)
WHEN @DateFormat = 'DD MMM YYYY' THEN CONVERT(nvarchar(30), GETDATE(), 106)
ELSE @DateFormat
end
return @ret
end
答案 1 :(得分:0)
您以错误的方式使用了SET
。正确用法如下。请注意,SET
需要跟随您尝试设置的变量名称。另外,您不应该RETURN
函数内部CASE
。这些都是我在下面发布的代码中处理的,这应该没有错误。
CREATE FUNCTION fn_DateFormat
(
@DateFormat nvarchar(MAX)
)
RETURNS NVARCHAR(30)
AS
BEGIN
SET @DateFormat = CASE
WHEN @DateFormat = 'YYYYMMDD'
THEN CONVERT(nvarchar(30), GETDATE(), 112)
WHEN @DateFormat = 'DD MMM YYYY'
THEN CONVERT(nvarchar(30), GETDATE(), 106)
ELSE NULL
END
RETURN @DateFormat
END;
GO