【问题标题】:Incrementing a combination of nvarchar and numbers [duplicate]增加nvarchar和数字的组合[重复]
【发布时间】:2013-09-02 12:30:22
【问题描述】:

以下场景: 我需要增加这样的代码DS0000001 所以下一个项目将是DS0000002,在DS0000003 之后,依此类推。

因此,为了在大的 INSERT 语句中生成这段代码,我编写了以下函数:

CREATE FUNCTION dbo.eufn_e5_importCRM_getNextClientCode(
  @partnerCode AS NVARCHAR(10),
  @number AS INT
    )
    RETURNS NVARCHAR(20)
    AS
    BEGIN
        DECLARE @next AS INT
        DECLARE @zeroes AS NVARCHAR(10)
        DECLARE @nextStr AS NVARCHAR(10)
        DECLARE @return AS NVARCHAR(20)
        DECLARE @partnerPrefix AS NVARCHAR(10)

        SELECT @next = RIGHT(c.clientCode,7) FROM Clients c

        SELECT @partnerPrefix = partners.partnerPrefix
          FROM partners WHERE partnerCode = @partnerCode
        SET @next = ISNULL(@next,0) + @number   
        SET @nextStr = CONVERT(NVARCHAR(10),@next)

        SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
                WHEN @next > 99 THEN  '0000'
                WHEN @next > 999 THEN  '000'
                WHEN @next > 9999 THEN  '00'
                WHEN @next > 99999 THEN  '0'
                WHEN @next > 999999 THEN  ''
                ELSE '000000'
        END

        IF ISNULL(@next,'') = ''
        BEGIN
            SET @return = @partnerPrefix + @zeroes + '1'
        END
        ELSE SET @return = @partnerPrefix + @zeroes + @nextStr

        RETURN @return
    END

@number 使用ROW_NUMBER() 函数手动获取我在插入语句中添加的行号。

这已经很好了——它将正确的代码插入到表中。

我不喜欢代码的这部分:

SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
        WHEN @next > 99 THEN  '0000'
        WHEN @next > 999 THEN  '000'
        WHEN @next > 9999 THEN  '00'
        WHEN @next > 99999 THEN  '0'
        WHEN @next > 999999 THEN  ''
        ELSE '000000'
END

我已经在 stackoverflow 上搜索了一段时间并用谷歌搜索了,但我找不到像 convert 这样的函数,它会让“0”留在它们所在的位置。

任何想法如何使这个功能更灵活,如果可能的话:可重复使用?

提前感谢您的帮助!

【问题讨论】:

  • 也许你是对的。虽然情况略有不同。看到解决方案听起来很相似,但是在您的链接中,答案(以及大多数答案)确实使用了其他功能。

标签: sql sql-server-2008 tsql


【解决方案1】:

你可以这样做

Declare @a int
Set @a =8756
Select 'DS' + REPLACE(STR(@a, 7), SPACE(1), '0')

演示:http://sqlfiddle.com/#!3/d41d8

【讨论】:

  • 您的 sqlfiddle 链接似乎已损坏。
  • @AndréLaszlo,是的,正在研究它,即使我不熟悉 SQL Fiddle。它现在工作
  • 这正是我想要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2021-04-02
相关资源
最近更新 更多