Exec存储过程 - 无效的运算符

时间:2011-05-18 19:54:25

标签: sql-server stored-procedures

我正在运行:

exec create_quarter @quarter='4q10',@debug='0'

我收到了这条消息:

  

消息8117,级别16,状态1,过程create_quarter,第234行   操作数数据类型varchar对减法运算符无效。

@quarter is a CHAR(4)

我需要对此声明做些什么:

SET @prev_quarter =  CASE WHEN LEFT(@quarter, 1) = '1' THEN '4Q' + RIGHT('00' + CAST(RIGHT(@quarter, 2) - 1 AS VARCHAR), 2)
    ELSE CONVERT(VARCHAR, LEFT(@quarter, 1) - 1) + RIGHT(@quarter, 3)
    END

解决我的问题?

3 个答案:

答案 0 :(得分:3)

RIGHT(@quarter, 2) - 1

应该是

CONVERT(INT, RIGHT(@quarter, 2)) - 1

CONVERT(VARCHAR, LEFT(@quarter, 1) - 1)

应该是

CONVERT(VARCHAR, CONVERT(INT, LEFT(@quarter, 1)) - 1)

答案 1 :(得分:0)

RIGHT(@quarter, 2) - 1和此LEFT(@quarter, 1) - 1没有意义。你如何从字符串中减去1?

也许您想要围绕cast(x as integer)中的那些?

答案 2 :(得分:0)

这两部分是错误的:

RIGHT(@quarter, 2) - 1 

LEFT(@quarter, 1) - 1

RIGHTLEFT都会返回一个字符串。您不能从字符串中减去数字。