Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Есть таблица типа:
_Reference16_IDRRef_KeyField_LineNo271_Fld272
0x8008000C2998F07011E3F529AB5EA62B 0x00000001 103342
0x8008000C2998F07011E3F529AB5EA62E 0x00000001 109561


_Fld272 - это почтовый индекс, так вот нужен запрос который увеличит этот индекс на 2 или любое другое число, проблема в том что апдейтом я его то могу увеличить, но вот беда ведущий ноль пропадает, а этого допускать нельзя, подскажите как решить задачу по увеличению с сохранением ведущего нуля. Заранее спасибо.
23 янв 17, 16:38    [20136138]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
DECLARE @S VARCHAR(10)='00945';
SELECT REPLACE(STR(@S+2),' ','0');
23 янв 17, 16:49    [20136220]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
iap
DECLARE @S VARCHAR(10)='00945';
SELECT REPLACE(STR(@S+2),' ','0');
Надо, конечно, так:
DECLARE @S VARCHAR(5)='00945';
SELECT REPLACE(STR(@S+2),' ','0');
23 янв 17, 16:50    [20136233]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
HarDlacK
подскажите как решить задачу по увеличению с сохранением ведущего нуля
Подсчитать количество ведущих нулей, преобразовать в число, прибавить, преобразовать в строку, добавить нужное количество ведущих нулей.

Но я думаю, вы не поняли задачу. Уточните ещё раз, что бы не попасть впросак.
Возможно, требуется не сохранять ведущие нули, а установить символьный вид поля с сохранением заданной длинны и дополнением до неё ведущими нулями. Это другая задача, ну и решается она намного проще.
23 янв 17, 16:51    [20136240]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
iap
DECLARE @S VARCHAR(10)='00945';
SELECT REPLACE(STR(@S+2),' ','0');
А если было '00999'?
Тогда у вас получится '01001', а нужно '001001'
23 янв 17, 16:53    [20136257]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Задача в том что это почтовые индексы, и сейчас некоторые из них изменились и их нужно увеличить на 2, допустим был индекс 03256 а стал 03258, у нас в базе он старый его надо апдейтом увеличить на 2 но вот после апдейта у меня уже получается 3258 в базе а надо чтоб было 03258, надеюсь доступно объяснил.
23 янв 17, 16:54    [20136275]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
у всех индексов длинна 5 символов больше быть не может)
23 янв 17, 16:55    [20136279]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
HarDlacK
у всех индексов длинна 5 символов больше быть не может)
Вы можете сформулировать задачу однозначно???
Меньше может быть, или нет?
Раз есть оговорка "больше быть не может", то значит может?
Но написано "у всех индексов длинна 5 символов", то значит не может?
Так оно не получится стать программистом.
23 янв 17, 16:58    [20136304]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
простите за двусмысленность, длинна индекса максимум 5 знаков, все индексы начинаются с 0, ситуации типа 09999 нужно увеличить на 2 быть не может.
23 янв 17, 17:03    [20136353]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Спасибо за внимание к моей проблеме, к сожелению сейчас еду к провайдеру, завтра с удовольствием продолжу общение.
23 янв 17, 17:05    [20136364]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
alexeyvg
Подсчитать количество ведущих нулей, преобразовать в число, прибавить, преобразовать в строку, добавить нужное количество ведущих нулей
DECLARE @S VARCHAR(10)='00945';
SELECT REPLICATE('0',ISNULL(NULLIF(PATINDEX('%[^0]%',@S),0)-1,LEN(@S)))+LTRIM(STR(@S+2));
23 янв 17, 17:05    [20136365]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
aleks2
Guest
Не, орлы, слабо у вас с фантазией
[/SRC]
[src]DECLARE @S VARCHAR(10)='00999';
SELECT right( '000000' + cast( @S + 2 as varchar(16) ), len(@S) );
23 янв 17, 17:10    [20136400]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9163
format() до кучи. Почтовый индекс - 6 цифр.
23 янв 17, 17:56    [20136692]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2428
Владислав Колосов
Почтовый индекс - 6 цифр.

смотря в какой стране
23 янв 17, 18:03    [20136713]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9163
StarikNavy,

да, у автора 5, не заметил.
23 янв 17, 18:07    [20136726]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
aleks2
Не, орлы, слабо у вас с фантазией
[/SRC]
[src]DECLARE @S VARCHAR(10)='00999';
SELECT right( '000000' + cast( @S + 2 as varchar(16) ), len(@S) );
А если длина при изменении увеличилась и стала больше первоначальной?
23 янв 17, 21:24    [20137421]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
aleks2
Guest
iap
aleks2
Не, орлы, слабо у вас с фантазией


DECLARE @S VARCHAR(10)='00999';
SELECT right( '000000' + cast( @S + 2 as varchar(16) ), len(@S) );
А если длина при изменении увеличилась и стала больше первоначальной?

Это называется "переполнение".
Но при желании контролировать и это можно.
24 янв 17, 07:51    [20138030]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
aleks2
Но при желании контролировать и это можно.
Я и контролирую (20136365)
24 янв 17, 10:09    [20138346]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Беда в том что таких записей сотни и я хотел бы отделаться выборкой
where 	_LineNo271 = 1

а делать
DECLARE
для каждого значения это нереально... Спасибо за предложенные варианты.
24 янв 17, 12:01    [20138955]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
HarDlacK
Беда в том что таких записей сотни и я хотел бы отделаться выборкой
where 	_LineNo271 = 1


а делать
DECLARE

для каждого значения это нереально... Спасибо за предложенные варианты.
На месте @S в запросе может быть имя любого строкового поля.
Ну объявил я для примера переменную, ну и что?! Вы же программист?
24 янв 17, 12:14    [20139029]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
_Fld272 nvarchar
24 янв 17, 12:14    [20139030]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
был бы я программистом жил бы в другой стране, я лишь админ которого заставляют править базу(
24 янв 17, 12:15    [20139036]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
UPDATE таблица
SET _Fld272 = REPLICATE(N'0',ISNULL(NULLIF(PATINDEX('%[^0]%',_Fld272),0)-1,LEN(_Fld272)))+LTRIM(STR(_Fld272+2))
WHERE ...;
24 янв 17, 12:19    [20139054]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
спасибо огромное как буду на работе попробую!
24 янв 17, 12:21    [20139067]     Ответить | Цитировать Сообщить модератору
 Re: Задача кажется простой, но..  [new]
HarDlacK
Member

Откуда:
Сообщений: 39
Спасибо! То что доктор прописал! Отрабатывает идеально!
24 янв 17, 13:25    [20139491]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить