如何得出以下字符串,请帮忙,谢谢

yandyzg 2012-11-09 05:37:56

create table #tmp(
nian smallint not null,
yue smallint not null,
autoinc int not null)


insert #tmp
select 2012,9,1
union all
select 2012,9,11
union all
select 2012,9,111
union all
select 2012,9,1111
union all
select 2012,10,222
union all
select 2012,10,22222
union all
select 2012,10,222222



------如何从#tmp表中得出以下结果(字符型)
2012090000001
2012090000011
2012090000111
2012090001111
2012100000222
2012100022222
2012100222222
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-11-12
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
上面好像是有问题的,后面的字符串颠倒了
谢谢,更正一下:
CREATE TABLE #tmp
      (
        nian SMALLINT NOT NULL ,
        yue SMALLINT NOT NULL ,
        autoinc INT NOT NULL
      )
  INSERT  #tmp
          SELECT  2012 ,
                  9 ,
                  1
          UNION ALL
          SELECT  2012 ,
                  9 ,
                  11
          UNION ALL
          SELECT  2012 ,
                  9 ,
                  111
          UNION ALL
          SELECT  2012 ,
                  9 ,
                  1111
          UNION ALL
          SELECT  2012 ,
                  10 ,
                  222
          UNION ALL
          SELECT  2012 ,
                  10 ,
                  22222
          UNION ALL
          SELECT  2012 ,
                  10 ,
                  222222 
  
  
  SELECT CONVERT(CHAR(4),nian ) +CASE WHEN LEN(yue)=1 THEN '0'+CONVERT (CHAR(1),yue ) ELSE CONVERT (CHAR(2),yue ) END+RIGHT('000000'+convert(varchar(6),autoinc),6)
  FROM #tmp
  
  /*
  ------------------
  201209000001
  201209000011
  201209000111
  201209001111
  201210000222
  201210022222
  201210222222
  
  (7 行受影响)
  
  */
xiaoqi7456 2012-11-12
  • 打赏
  • 举报
回复
create table #tmp( nian smallint not null, yue  smallint not null, autoinc int not null)     insert #tmp select 2012,9,1 union ALL
select 2012,9,11 union ALL
select 2012,9,111 union ALL
select 2012,9,1111 union ALL
select 2012,10,222 union ALL
select 2012,10,22222 union ALL
select 2012,10,222222



SELECT CONVERT(varchar(20),nian)+
replace(space(2-len(CONVERT(varchar(20),yue)))+CONVERT(varchar(20),yue),' ','0')
+replace(space(7-len(CONVERT(varchar(20),autoinc)))+CONVERT(varchar(20),autoinc),' ','0')
FROM #tmp
坚_持 2012-11-10
  • 打赏
  • 举报
回复
LongRui888 2012-11-09
  • 打赏
  • 举报
回复
应该是这样,看着有点复杂,但是能根据autoinc的长度,动态的调整:

create table #tmp(
nian smallint not null,
yue  smallint not null,
autoinc int not null)
 
 
insert #tmp
select 2012,9,1
union all
select 2012,9,11
union all
select 2012,9,111
union all
select 2012,9,1111
union all
select 2012,10,222
union all
select 2012,10,22222
union all
select 2012,10,222222


SELECT CAST(nian AS varchar) +                   --年

       CASE WHEN yue >= 1 AND yue <=9
                 THEN '0' + CAST(yue AS varchar)
            ELSE CAST(yue AS varchar)
       END +                                     --月
            
       CASE WHEN len(CAST(autoinc AS VARCHAR)) < ( SELECT max(len(CAST(autoinc AS varchar))) 
                                                   FROM #tmp)  --求autoinc的最大长度
                 THEN '0' + replicate('0', 
                                      (SELECT max(len(CAST(autoinc AS varchar))) FROM #tmp) - len(CAST(autoinc AS VARCHAR))
                                     )   --重复字符0
                          + CAST(autoinc as varchar)              
            ELSE '0' + CAST(autoinc AS varchar)   
       END              
FROM #tmp 
/*
2012090000001
2012090000011
2012090000111
2012090001111
2012100000222
2012100022222
2012100222222
*/
LongRui888 2012-11-09
  • 打赏
  • 举报
回复
上面好像是有问题的,后面的字符串颠倒了
蔡少松 2012-11-09
  • 打赏
  • 举报
回复
引用 1 楼 jyh070207 的回复:
select cast(nian as varchar) + REPLICATE('0',2-LEN(yue)) + cast(yue as varchar)+REPLICATE('0',7-LEN(autoinc)) + cast(autoinc as varchar) from #tmp
二楼的完全可以,不过如果数据不是这种格式就不起作用了。必须想case 依次判断下 nian ,yue ,autoinc 的长度,不能直接截取,如果只要这几个数据的,用二楼的完全OK
發糞塗牆 2012-11-09
  • 打赏
  • 举报
回复
CREATE TABLE #tmp
    (
      nian SMALLINT NOT NULL ,
      yue SMALLINT NOT NULL ,
      autoinc INT NOT NULL
    )
INSERT  #tmp
        SELECT  2012 ,
                9 ,
                1
        UNION ALL
        SELECT  2012 ,
                9 ,
                11
        UNION ALL
        SELECT  2012 ,
                9 ,
                111
        UNION ALL
        SELECT  2012 ,
                9 ,
                1111
        UNION ALL
        SELECT  2012 ,
                10 ,
                222
        UNION ALL
        SELECT  2012 ,
                10 ,
                22222
        UNION ALL
        SELECT  2012 ,
                10 ,
                222222 
                

SELECT CONVERT(CHAR(4),nian)+CASE WHEN LEN(yue)=1 THEN '0'+CONVERT (CHAR(1),yue ) ELSE CONVERT (CHAR(2),yue ) END +LEFT(CONVERT(VARCHAR(12),autoinc)+'000000',6)  
FROM #tmp

/*
------------------
201209100000
201209110000
201209111000
201209111100
201210222000
201210222220
201210222222

(7 行受影响)

*/
jyh070207 2012-11-09
  • 打赏
  • 举报
回复
select cast(nian as varchar) + REPLICATE('0',2-LEN(yue)) + cast(yue as varchar)+REPLICATE('0',7-LEN(autoinc)) + cast(autoinc as varchar) from #tmp

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧