在SQL中计算下一个字母

时间:2015-06-24 06:32:57

标签: sql sql-server

基本上,表有一个header-column和一个sequence-column。该序列包括' aa',' ab'' ac'等

我试图创建一个给出标题输入的函数,它给出了下一个可能的序列。例如,如果最后一个序列以' a'开头。结束于' d' (序列' ad'),它给出了' ae'。 首先,我选择当前最高的'序列(MAX),然后我更新第二个字母

我的代码:

    ALTER FUNCTION [dbo].[fctCalculateNextSeqCode]
(
    -- Add the parameters for the function here
    @Input nvarchar(50)
)
RETURNS nvarchar
AS
BEGIN

    DECLARE @NewSeq nvarchar(50)
    DECLARE @OldSeq nvarchar(50)

    SET @OldSeq = (select Max(SMTRPD_Sequence) from dbo.TbOrgSM_Transactions_PriceLines_Definition where SMTRPD_Header2 = @Input)

    --first character remains, second character is next in alphabet
    select @NewSeq = LEFT(@OldSeq,1) + CHAR(ASCII(RIGHT(@OldSeq,1))+1);

    -- Return the result of the function
    RETURN @NewSeq

END

当我尝试运行该函数时,它只返回序列的第一个字符,而不是第二个字符。我做错了什么?

1 个答案:

答案 0 :(得分:6)

您应该将RETURNS写为RETURNS nvarchar(50),因为nvarchar的默认长度为1个字符长。

修改

对于nchar [ ( n ) ]nvarchar [ ( n | max ) ],当在数据定义或变量声明语句中未指定n时,默认长度为1.如果未使用CAST函数指定n,则默认长度为30。

请查看更多信息here