Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 根据每个增量上的固定长度和数字单位生成字符串格式_Sql Server - Fatal编程技术网

Sql server 根据每个增量上的固定长度和数字单位生成字符串格式

Sql server 根据每个增量上的固定长度和数字单位生成字符串格式,sql-server,Sql Server,我必须编写一个SP来生成一个由国家(7个字符)+省(1个字符)+从01开始的数字组合而成的字符串。例如:JAMAICAK01 其中,牙买加(国家)、K(省)和01是数字,每个交易递增1 我这里的问题是生成的字符串长度max是10,可以小于10但不能大于10 它应该按照一定的规则来处理,比如 这种组合并不存在 当数字单位从十变为百时,生成字符串 长度>10,我需要移除正确的字符,例如Jamaicakk10到 JAMAICAK10从右侧开始,使总最大长度为10 在我下面的代码中,我试图检查组合是否存

我必须编写一个SP来生成一个由国家(7个字符)+省(1个字符)+从01开始的数字组合而成的字符串。例如:JAMAICAK01 其中,牙买加(国家)、K(省)和01是数字,每个交易递增1

我这里的问题是生成的字符串长度max是10,可以小于10但不能大于10

它应该按照一定的规则来处理,比如

  • 这种组合并不存在
  • 当数字单位从十变为百时,生成字符串
    长度>10,我需要移除正确的字符,例如Jamaicakk10到 JAMAICAK10从右侧开始,使总最大长度为10 在我下面的代码中,我试图检查组合是否存在,我得到它的最大值,并从最后一个进行数值递增。我认为可以用更好的方式来做

           Declare @Province char(2)
           Declare @Country varchar(10)
           declare @CounProv varchar(10)
           Declare @SimilarCounPRov varchar(max) = '';
           declare @FinalString nvarchar(12)
           declare @s varchar(50)
           declare @s1 varchar(50)
           declare @s2 varchar(50)
    
           Set @Province = LEFT('KINGSTON', 1)           
           Set @Country = LEFT('JAMAICA', 7)   
    
           Set @CounProv = @Country+@Province
    
           Select @SimilarCounPRov = MAX(field1) from dbo.table where field1  
           LIKE '%JAMAICAK%' 
    
           if @SimilarCounPRov IS NOT NULL 
       BEGIN
       Set @s = (select fn_AlphaOnly('%JAMAICAK99%')) -- returns JAMAICAK
    
       Set @s1 = (select fn_NumericOnly('%JAMAICAK99%'))  -- returns 199
    
       set @s2= @s1 +1   -- increment by 1
    
       if len(@FinalString) > 10
          ---- 
           need help here----`
    

    我不确定我是否理解您的所有要求,但如果您需要生成字符串,如:JAMAICAK1,JAMAICAK2,…JAMAICAK10…,JAMAICAK11,…JAMAICA100,JAMAICA101,…JAMAIC1000,JAMAIC1001

    您可以尝试利用这段代码:

    Declare @Province char(2)
    Declare @Country varchar(10)
    Declare @CounProv varchar(10)
    Declare @value int 
    Declare @str_value VARCHAR(100) 
    
    Set @Province   = LEFT('KINGSTON', 1)           
    Set @Country    = LEFT('JAMAICA', 7)   
    Set @value      = 999999
    Set @CounProv   = @Country+@Province
    Set @str_value  = (select CAST(@value AS varchar(100)))
    
    select LEFT(@CounProv,10-LEN(@str_value))+@str_value
    
    告诉我是否有用

    “删除eg的正确字符”未显示Seq#的有效结果。您的结果显示牙买加7个字符、K1个字符和序列2个数字,但不是100或101,。。。国家和省的Declare-s太长。现在似乎是时候重新设计表了,以便Country、Province和SeqNum都有各自独立的规范化列,这些列稍后仅在显示时格式化为10个字符。