Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
HarDlacK Member Откуда: Сообщений: 39 |
Есть таблица типа:
_Fld272 - это почтовый индекс, так вот нужен запрос который увеличит этот индекс на 2 или любое другое число, проблема в том что апдейтом я его то могу увеличить, но вот беда ведущий ноль пропадает, а этого допускать нельзя, подскажите как решить задачу по увеличению с сохранением ведущего нуля. Заранее спасибо. |
|||||||||||||
23 янв 17, 16:38 [20136138] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
DECLARE @S VARCHAR(10)='00945'; SELECT REPLACE(STR(@S+2),' ','0'); |
23 янв 17, 16:49 [20136220] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
DECLARE @S VARCHAR(5)='00945'; SELECT REPLACE(STR(@S+2),' ','0'); |
||
23 янв 17, 16:50 [20136233] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Но я думаю, вы не поняли задачу. Уточните ещё раз, что бы не попасть впросак. Возможно, требуется не сохранять ведущие нули, а установить символьный вид поля с сохранением заданной длинны и дополнением до неё ведущими нулями. Это другая задача, ну и решается она намного проще. |
||
23 янв 17, 16:51 [20136240] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Тогда у вас получится '01001', а нужно '001001' |
||
23 янв 17, 16:53 [20136257] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
Задача в том что это почтовые индексы, и сейчас некоторые из них изменились и их нужно увеличить на 2, допустим был индекс 03256 а стал 03258, у нас в базе он старый его надо апдейтом увеличить на 2 но вот после апдейта у меня уже получается 3258 в базе а надо чтоб было 03258, надеюсь доступно объяснил. |
23 янв 17, 16:54 [20136275] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
у всех индексов длинна 5 символов больше быть не может) |
23 янв 17, 16:55 [20136279] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Меньше может быть, или нет? Раз есть оговорка "больше быть не может", то значит может? Но написано "у всех индексов длинна 5 символов", то значит не может? Так оно не получится стать программистом. |
||
23 янв 17, 16:58 [20136304] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
простите за двусмысленность, длинна индекса максимум 5 знаков, все индексы начинаются с 0, ситуации типа 09999 нужно увеличить на 2 быть не может. |
23 янв 17, 17:03 [20136353] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
Спасибо за внимание к моей проблеме, к сожелению сейчас еду к провайдеру, завтра с удовольствием продолжу общение. |
23 янв 17, 17:05 [20136364] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8326 |
format() до кучи. Почтовый индекс - 6 цифр. |
23 янв 17, 17:56 [20136692] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2396 |
смотря в какой стране |
||
23 янв 17, 18:03 [20136713] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8326 |
StarikNavy, да, у автора 5, не заметил. |
23 янв 17, 18:07 [20136726] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
![]() |
||
23 янв 17, 21:24 [20137421] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Это называется "переполнение". Но при желании контролировать и это можно. |
||||
24 янв 17, 07:51 [20138030] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
|
||
24 янв 17, 10:09 [20138346] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
Беда в том что таких записей сотни и я хотел бы отделаться выборкой
where _LineNo271 = 1
а делать
DECLARE
для каждого значения это нереально... Спасибо за предложенные варианты.
|
24 янв 17, 12:01 [20138955] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
Ну объявил я для примера переменную, ну и что?! Вы же программист? |
||
24 янв 17, 12:14 [20139029] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
_Fld272 nvarchar |
24 янв 17, 12:14 [20139030] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
был бы я программистом жил бы в другой стране, я лишь админ которого заставляют править базу( |
24 янв 17, 12:15 [20139036] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47050 |
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] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
спасибо огромное как буду на работе попробую! |
24 янв 17, 12:21 [20139067] Ответить | Цитировать Сообщить модератору |
HarDlacK Member Откуда: Сообщений: 39 |
Спасибо! То что доктор прописал! Отрабатывает идеально! |
24 янв 17, 13:25 [20139491] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |