Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывод ИНН с лидирующим 0  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 464
Добрый день!
Есть задача вывода ИНН. Значение хранится в таблице, в поле bigint. Но при выводе нужно выводить лидируший '0', у ИНН длина которых без нуля 9 или 11. Сделал запрос:
SELECT otINN,
    otINNs = CASE
            WHEN LEN(CAST(otINN As varchar)) = 9  THEN '0' + CAST(otINN As varchar)
            WHEN LEN(CAST(otINN As varchar)) = 11 THEN '0' + CAST(otINN As varchar)
            ELSE otINN
    END,
    LEN(CAST(otINN As varchar))


И возникла проблема: если в CASE нет оператора ELSE - всё работает правильно, а если вставить ELSE - лидирующий 0 не добавляется :(

Как можно решить данную проблему?
28 дек 12, 16:41    [13701715]     Ответить | Цитировать Сообщить модератору
 Re: Вывод ИНН с лидирующим 0  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
saszay
Добрый день!
Есть задача вывода ИНН. Значение хранится в таблице, в поле bigint. Но при выводе нужно выводить лидируший '0', у ИНН длина которых без нуля 9 или 11. Сделал запрос:
SELECT otINN,
    otINNs = CASE
            WHEN LEN(CAST(otINN As varchar)) = 9  THEN '0' + CAST(otINN As varchar)
            WHEN LEN(CAST(otINN As varchar)) = 11 THEN '0' + CAST(otINN As varchar)
            ELSE otINN
    END,
    LEN(CAST(otINN As varchar))


И возникла проблема: если в CASE нет оператора ELSE - всё работает правильно, а если вставить ELSE - лидирующий 0 не добавляется :(

Как можно решить данную проблему?


Потому что надо так сделать:
SELECT otINN,
    otINNs = CASE
            WHEN LEN(CAST(otINN As varchar)) = 9  THEN '0' + CAST(otINN As varchar)
            WHEN LEN(CAST(otINN As varchar)) = 11 THEN '0' + CAST(otINN As varchar)
            ELSE     LEN(CAST(otINN As varchar))
    END,
    LEN(CAST(otINN As varchar))
28 дек 12, 16:44    [13701729]     Ответить | Цитировать Сообщить модератору
 Re: Вывод ИНН с лидирующим 0  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Сори, лишнее скопировал. Так сделать
SELECT otINN,
    otINNs = CASE
            WHEN LEN(CAST(otINN As varchar)) = 9  THEN '0' + CAST(otINN As varchar)
            WHEN LEN(CAST(otINN As varchar)) = 11 THEN '0' + CAST(otINN As varchar)
            ELSE     CAST(otINN As varchar)
    END,
    LEN(CAST(otINN As varchar))
28 дек 12, 16:45    [13701733]     Ответить | Цитировать Сообщить модератору
 Re: Вывод ИНН с лидирующим 0  [new]
Crimean
Member

Откуда:
Сообщений: 13147
declare @l int
set @l = 10

select top 200 replicate( '0', @l - len( ltrim( str( id )))) + ltrim( str( id )) 
from sysobjects 
where id > 0
28 дек 12, 17:25    [13701957]     Ответить | Цитировать Сообщить модератору
 Re: Вывод ИНН с лидирующим 0  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 464
Alexandr Kr.
Сори, лишнее скопировал. Так сделать
SELECT otINN,
    otINNs = CASE
            WHEN LEN(CAST(otINN As varchar)) = 9  THEN '0' + CAST(otINN As varchar)
            WHEN LEN(CAST(otINN As varchar)) = 11 THEN '0' + CAST(otINN As varchar)
            ELSE     CAST(otINN As varchar)
    END,
    LEN(CAST(otINN As varchar))


Спасибо!!!
Помогло
28 дек 12, 17:38    [13702052]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить