2010-03-01 42 views
0

FN我使用下面的查詢關注與複製在SQL

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右邊的值是移動rightward.Can人幫助做每列固定長度?

回答

0

我猜Staffname有尾隨空格。 這些將被LEN忽略。

試試這個給力的20個字符準確長度:不是

LEFT(staff.StaffNAme + '     ', 20) 

......

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

還是一樣result.Is有另一種方式? – user42348 2010-03-01 07:49:30

+0

@ ramyatk06:我們需要一些更多的信息,然後:樣本數據,錯誤和正確的輸出等。我的左代碼將給出完全20個字符。 – gbn 2010-03-01 07:58:44

+0

另一種做同樣的方法是'cast(staff.StaffNAme as char(20))'。 – 2011-02-26 13:34:32

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