IndexError: list assignment index out of range
我拥有此功能。在星期一,星期三和星期五的情况下该功能正在打印的输出正确。但在其他情况下,它是从else条件打印输出。
答案 0 :(得分:3)
总是 声明您的长度,比例和精度...不声明您的长度 会导致意外的行为;就像您在这里一样。
ALTER FUNCTION WEEKDAYS(@DAY VARCHAR)
与以下相同:
ALTER FUNCTION WEEKDAYS(@DAY VARCHAR(1))
由于@DAY
的长度为1,因此它永远不能具有值'TU'
,因为它是2个字符;最多为@DAY
的两倍。为您的varchar
参数定义适当的长度,问题就消失了。
不过,完全不同的是,为什么要使用UDF来获取工作日编号,为什么不DATEPART(WEEKDAY, {Date})
?
答案 1 :(得分:0)
您也可以使用DATEPART()
函数来获取不带函数的代码。但是要纠正您的功能,您可以尝试以下方法。
ALTER FUNCTION WEEKDAYS(@DAY VARCHAR(10))
RETURNS INT
AS BEGIN
IF(@DAY IS NULL)
RETURN 0
DECLARE @OUTPUT INT
SELECT @OUTPUT=
CASE WHEN SUBSTRING(@DAY,1,1) = 'M' THEN 1
WHEN SUBSTRING(@DAY,1,2) = 'TU' THEN 2
WHEN SUBSTRING(@DAY,1,1) = 'W' THEN 3
WHEN SUBSTRING(@DAY,1,2) = 'TH' THEN 4
WHEN SUBSTRING(@DAY,1,1) = 'F' THEN 5
WHEN SUBSTRING(@DAY,1,2) = 'SA' THEN 6
WHEN SUBSTRING(@DAY,1,2) = 'SU' THEN 7
ELSE
99 END
RETURN @OUTPUT
END
SELECT dbo.WEEKDAYS('SUNDAY') as SUNDAY
SELECT dbo.WEEKDAYS('MONDAY') as MONDAY
SELECT dbo.WEEKDAYS('TUESDAY') as TUESDAY
SELECT dbo.WEEKDAYS('WEDNESDAY') as WEDNESDAY
SELECT dbo.WEEKDAYS('THURSDAY') as THURSDAY
SELECT dbo.WEEKDAYS('FRIDAY') as FRIDAY
SELECT dbo.WEEKDAYS('SATURDAY') as SATURDAY
输出如下所示