关注在sql中复制fn

时间:2010-03-01 06:57:09

标签: sql sql-server tsql

我正在使用以下查询

create table  #Attendence (id int identity(1,1),det varchar(2000))
insert into #Attendence (det )
select  --convert(char(10),@Date,3) +REPLICATE(' ', 20 - LEN(convert(char(10),@Date,3)))+
        staff.StaffNAme +REPLICATE(' ', 20 - LEN(staff.StaffNAme ))+
        case Att.FN when 1 then 'Present'
                else 'Absent'
        end  +REPLICATE(' ', 20 - LEN(case Att.FN when 1 then 'Present'
                else 'Absent'
        end ))+
        case Att.AN when 1 then 'Present'
                else 'Absent'
        end +REPLICATE(' ', 20 - LEN(case Att.AN when 1 then 'Present'
                else 'Absent'
        end  ))
from  Staff_Details staff
      inner join
        STAFF_Attendance att
            on staff.staffid=att.staffId
Select * from   #Attendence

问题出在结果集中,因为STaffName的长度增加,staffname右边的值向右移动。任何人都可以帮助使每列固定长度吗?

2 个答案:

答案 0 :(得分:2)

create table  #Attendence (id int identity(1,1),det varchar(2000))
insert into #Attendence (det )
select  --cast(convert(char(10),@Date,3) as char(20)) +
        cast(staff.StaffNAme as char(20)) +
        cast(case Att.FN when 1 then 'Present' else 'Absent' end as char(20)) +
        cast(case Att.AN when 1 then 'Present' else 'Absent' end as char(20))
from  Staff_Details staff
      inner join
        STAFF_Attendance att
            on staff.staffid=att.staffId
Select * from   #Attendence

答案 1 :(得分:0)

我猜Staffname有尾随空格。 这些将被LEN忽略。

尝试此操作以强制确定20个字符的长度:

LEFT(staff.StaffNAme + '                    ', 20)

......而不是......

staff.StaffNAme + REPLICATE(' ', 20 - LEN(staff.StaffNAme))