2010-12-15 3 views
0
SELECT 
ISNULL(CONVERT(CHAR(8), A.field1), REPLICATE(' ', 8)) + 
ISNULL(CONVERT(CHAR(10), A.field2), REPLICATE(' ', 10)) 
from #tmpTable a 

У меня есть concat some field. Field1 и Field2 являются целыми, когда я конвертирую в char, они должны иметь определенного размера. Если значение поля1 равно 123, результат должен быть «123» (с пробелом).Обращение к карточке с дополнением

В конце концов, я хочу что-то вроде этого:

123  456 
985454  232355 

Если значение равно нулю, у меня есть пустое пространство 8 или 10 пустой

Любая идея?

Спасибо,

Update1: Результат мне нужно

  1001335 
     1001335 
12401886 10994 

alt text

+0

Знак плюс во 2-й строке, кажется, неправильно – 2010-12-15 08:32:28

+0

да удалены, но это не проблема – 2010-12-15 08:44:44

ответ

3

Вам не нужно REPLICATE при преобразовании целого числа в char(8) он будет автоматически иметь длину из 8 символов.

 Select Convert(Char(8), IsNull(a.Field1,'')) + 
      Convert(Char(10), IsNull(a.Field2,'')) 
    From #tmpTable 

UPDATE

Извиняюсь, что вам нужно преобразовать в char перед IsNull иначе она будет равна нулю.

Как это:

Create Table #t 
(
Field1 int, 
Field2 int 
) 
Insert Into #t 
Select Null, 1001335 
union all 
select Null, 1001335 
union all 
select 1445121, 1001335 
union all 
select 1331445, null 


Select IsNull(Convert(Char(8), a.Field1),'') + 
     IsNull(Convert(Char(10), a.Field2),'') 
From #t a 

Drop table #t 
Смежные вопросы