各位朋友,小弟的的表分别有两个字段,其中一个字段存储客户的英文名,另外一个字段存储客户的中文名,自己的SELECT语句如下,但为什么不能达到预期的效果的呢?请赐教,谢谢!SELECT left(clientcode+REPLICATE(' ', L1-LEN(clientcode)),L1)+'|'+
       left(clientname+REPLICATE(' ', L2-LEN(clientname)),L2)  aa
FROM client,(SELECT MAX(LEN(convert(nvarchar(60),clientcode))) AS L1,MAX(LEN(convert(nvarchar(60),clientname))) AS L2 FROM client  ) T where clientname is not null
查询分析器SELECT出来的结果:TIEN            |天河            
TOPE            |創地            
STAR            |TRIAR       
NDA             |VAN        
E(BD)LTD        |WEL(BD)LTD
永升                 |永地            
長中                 |長国            
南梦                 |南是            
桐三亞               |桐三亞          
       自己最终想要的效果:(每一条记录都是非常整齐的对齐)
TIEN            |天河            
TOPE            |創地            
STAR            |TRIAR       
NDA             |VAN        
E(BD)LTD        |WEL(BD)LTD
永升            |永地            
長中            |長国            
南梦            |南是            
桐三亞          |桐三亞  

解决方案 »

  1.   

    把结果转成char再连接,不过要保证有足够的长度
      

  2.   

    就楼主的结果举个例子,楼主根据需要自己修改
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([col1] varchar(8),[col2] varchar(10))
    insert [tb]
    select 'TIEN','天河' union all
    select 'TOPE','創地' union all
    select 'STAR','TRIAR' union all
    select 'NDA','VAN' union all
    select 'E(BD)LTD','WEL(BD)LTD' union all
    select '永升','永地' union all
    select '長中','長国' union all
    select '南梦','南是' union all
    select '桐三亞','桐三亞'
     
    ---查询
    select 
    result=cast(col1 as char(10))+'|'+cast(col2 as char(10))
    from tb/**
    result
    ---------------------
    TIEN      |天河      
    TOPE      |創地      
    STAR      |TRIAR     
    NDA       |VAN       
    E(BD)LTD  |WEL(BD)LTD
    永升      |永地      
    長中      |長国      
    南梦      |南是      
    桐三亞    |桐三亞    (9 行受影响)
    **/
      

  3.   

    还是看得不明白,能不能再详细一点呢,衷心请赐教,谢谢引用 6 楼 sgtzzc 的回复:
    就楼主的结果举个例子,楼主根据需要自己修改SQL code
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([col1] varchar(8),[col2] varchar(10))
    insert [tb]
    select 'TIEN','天河' union all
    select 'TOP……
      

  4.   

    SELECT if(LENGTH(left(clientcode+REPLICATE(' ', L1-LEN(clientcode)),L1)) < 6,(left(clientcode+REPLICATE(' ', L1-LEN(clientcode)),L1)) + SPACE(6 - (LENGTH(left(clientcode+REPLICATE(' ', L1-LEN(clientcode)),L1)) ) ,(left(clientcode+REPLICATE(' ', L1-LEN(clientcode)),L1)) )+'|'+
      left(clientname+REPLICATE(' ', L2-LEN(clientname)),L2) aa
    FROM client,(SELECT MAX(LEN(convert(nvarchar(60),clientcode))) AS L1,MAX(LEN(convert(nvarchar(60),clientname))) AS L2 FROM client ) T where clientname is not null
      

  5.   

    上面的语句没有简化 ,  思想路线就是 | 前面的 长度如果不够 6个则 自动添加空格 
      最终结果是     
    TIEN(6-4个空格)|天河  
    NDA (6-3个空格)|VAN  6是自己定的  可以自己设置 ,写成存储过程就比较方便定义了   
      

  6.   

    varchar是变长,字符数多少占多少位
    char是定长,设定多少就占多少位