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

Откуда: Свердловск
Сообщений: 6
Всем доброго времени суток!

У меня такая ситуация:
есть поле ADDRESS типа varchar, в нем адреса бывают разной стилистики: "ул. Ленина 45", "ул.Ленина 45", "Ленина 45".
Скажите, можно ли как-то автоматически привести этот столбец к виду "Ленина 45, ул.".

выбрать лайком я эти записи могу, а как вырезать у всех один и тот же кусок из поля?
поиск из полезного выдал только эту тему, но там же селект, а мне апдэйт нужен, чтобы не отобразить/вывести, а именно изменить сами записи в БД.

Заранее спасибо=)
17 фев 12, 05:06    [12106977]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
aleks2
Guest
1. В общем случае - низзя.
2. Но наиболее часто встречающиеся варианты -можна.
3. Пишешь функцию, которая пребразует адрес в правильный, ну и
UPDATE T SET ADDRESS=dbo.RightADDRESS(ADDRESS)
FROM Table T 
WHERE ADDRESS<>dbo.RightADDRESS(ADDRESS)


4."а как вырезать у всех один и тот же кусок из поля?"

Строку шинкуешь на части. Для каждой части определяешь тип. И собираешь их в нужной последовательности обратно в строку.
17 фев 12, 05:53    [12106987]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
LiSeHoK
Member

Откуда: Свердловск
Сообщений: 6
ну эт понятно, а чем её "шинковать" то?:)
и зачем определять тип? варчар же, заранее все известно..
и какой функцией собирать?

нет ли какого оператора вроде LIKE, который находит в строке нужную последовательность ("ул. " и "ул." в моем случае) и удаляет её?
ну и оператора который потом в конце может добавить один и тот же кусок к каждой ячейке..
17 фев 12, 06:39    [12107004]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
aleks2
Guest
Не, ну ты могешь делать как хошь.

Вольному - воля.

ЗЫ. ул. 22 партсъезда 13
17 фев 12, 06:54    [12107011]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
LiSeHoK
Member

Откуда: Свердловск
Сообщений: 6
только без нервов;-)

я видимо не так понял что ты имеешь ввиду под словом "тип". да и про партсъезд тоже..
Мне надо просто префикс "ул." переставить в конец, потому что сейчас сортировка по адресу работает криво, электорат жалуется, просит все привести к единому виду:)

А всякие "партсъезды" в "съезды партии" я переводить не планирую, ибо улиц в базе таких пара-тройка, а все варианты их написания я угадывать опухну. При необходимости ручками поправят.
17 фев 12, 07:26    [12107023]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
IUnIKnown
Member

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

А такой вариант подойдет:
UPDATE dbo.[TestTable]
SET [Address ]=LTRIM(SUBSTRING(Address ,CHARINDEX('ул.',Address)+3,LEN(Address)))+'ул.'

или

UPDATE dbo.[TestTable]
SET [Address ]=LTRIM(RIGHT(Address ,LEN(Address )-CHARINDEX('ул.',Address)+2,LEN(Address)))+'ул.'
17 фев 12, 08:58    [12107171]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
LiSeHoK
Мне надо просто префикс "ул." переставить в конец, потому что сейчас сортировка по адресу работает криво, электорат жалуется, просит все привести к единому виду:)
UPDATE dbo.[TestTable]
SET [Address ]=LTRIM(STUFF(Address ,'ул.',''))+' ул.'
17 фев 12, 09:23    [12107288]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
бул. дружбы народов 21
17 фев 12, 10:00    [12107499]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
+
LiSeHoK
Скажите, можно ли как-то автоматически привести этот столбец к виду
Ага, процесс:
1. Вставлем непраильные данные в неправильном формате
2. Переконвертируем в "правильный"
3. Переконвертируем в ...

Может сразу?

Проектирование:
1. Пишем код (с ошибками)
2. Пишем сверху код, обходящий ошибки первого (костыль)
3. Пишем сверху костыль, обходящий ...

Может поправить первоначальный?

А адрес можно и порзать на поля.


А одноразовую работу можно делать и не на TSQL. Или банально RegEx-пы подключить.
А если данные "внешние", то делать также "внешними" средствами. Скуль не панацея.
17 фев 12, 13:03    [12109165]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
LiSeHoK
Member

Откуда: Свердловск
Сообщений: 6
alexeyvg, ваш вариант не работает. Сначала просит ещё 1 аргумент ко STUFF, когда я вставил адрес - сказал что варчар не может быть вторым и третьим параметром.

kDnZP, моя твоя не понимать:D

IUnIKnown, первый вариант работает, но обрезает лишнее:(
Второму варианту параметров не хватает..


Mnior, гениально!:)
Вот обожаю ситуацию, когда задаешь конкретный вопрос, а в ответ получаешь подобное глубокомысленное нечто от "самых умных"=)))
Надеюсь, когда ты в следующий раз придешь к терапевту за рецептом средства от гриппа, он тебе пооодрооообно напишет, что нельзя зимой без шапки ходить и что руки надо чаще мыть;) Ну и отправит с миром=)
ps это была моя первая БД, оттуда и ошибки. Сейчас пишу новую, где учитываю опыт и новые требования от заказчика;)

--------------------------

Всем спасибо (и даже Mnior'у;), за поднятие настроения:))!
Теперь, зная чем колдовать, постараюсь разобраться сам
20 фев 12, 03:48    [12119858]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
LiSeHoK, обожаю людей, которые вместо того, чтобы внимательно слушать и осозновать ответы, - начинают всякую фигню аля "обидели мышку" писать.

Еще раз, может осознаете:
1. Спроектировать БД правильно
2. Полуавтоматическим методом перегнать данные в правильную БД (тут желательно написать несколько алгоритмов), складируя во временные таблицы/табличные переменные и сравнивая полученные результаты между собой
3. ...
5. Profit
20 фев 12, 10:13    [12120300]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
LiSeHoK
Mnior,
Вот обожаю ситуацию, когда задаешь конкретный вопрос
Ну да, ну да. Споллер прочитал, а ниже нет.
Мне к терапевту, а вам к глазному.

+ kDnZP
LiSeHoK
kDnZP, моя твоя не понимать :D
Да да, весело и пофигистично.

kDnZP, зря мы это распинается. Сюда он больше не заглянет.
Но если честно, я не знаю как ле учить общаться с такими (остро реагируюших на критику + по фигу на понимание окружающего и других)

20 фев 12, 12:30    [12121418]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
LiSeHoK
Member

Откуда: Свердловск
Сообщений: 6
kDnZP, товарищ, я задал конкретный вопрос. И мне на него конкретно люди ответили, за что им спасибо. И эти ответы я внимательно выслушал и попробовал. И даж спасибо сказал. А "бул. дружбы народов 21" было ответом на мой вопрос? Я, если честно, вообще фразы не понял, потому и ответ лично тебе был соответствующий.
Спешал фор ю, повторяю из прошлого поста: ps это была моя первая БД, оттуда и ошибки. Сейчас пишу новую, где учитываю опыт и новые требования от заказчика;)
То что спросил здесь - именно костыль, именно на время пока переписывается старая версия.
прежде чем писать "про мышек" - надо написать чего по делу, удач, мистер профит;)


Mnior, это ветка не чтобы пообщаться, для пообщаться есть курилка. Здесь тематический раздел. Я задал вполне конкретный вопрос. Зачем мне говорить про то, как космические корабли бороздят большой театр?
И то, что под споллером, я тоже прочитал. Увидел там, что скуль не панацея, а чем лучше сделать - нет; увидел что адрес можно порезать, а чем - тоже нет и тд.
Отсюда и сделал вывод, что вы очередной "умник". Если цель была помочь мне с моим вопросом - приношу извинения



плодить офтоп смысла не вижу, так что холивар объявляю закрытым=)
21 фев 12, 03:29    [12127156]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
LiSeHoK, да о каком вы холиваре говорите? Вы просто даже не можете понять данные вам ответы. Но извините, нет ни времени, ни желания "разжевывать" вам очевидные вещи. Но я всеже попробую:

Вариант намба 1: Осознать что пользовательский ввод адреса может быть в любом формате, что есть не только улицы, но и бульвары, проспекты, переулки всякие, есть корпуса домов и прочие разные особенности, есть банальные ошибки пользовательского ввода. В данном случае можно воспользоваться полнотекстовым поиском, алгоритмами и/или движками нечеткого поиска, методами ускорения LIKE '%...%', чем-то еще... Как итог: адрес хранится в одном поле и нужно быть готовым к различному написанию одного и того же адреса, что решаемо алгоритмами поиска.

Вариант намба 2: По максимуму усложнить возможности потенциальному вражине ввести неправильный адрес, при этом он дробиться на кучу полей с нужной степенью маниакальности. Навешиваются проверки, ограничения и т.д. С операторами ввода проводятся воспитательные работы. Организуются механизмы слияния адресов. Ну что-то еще можно придумать. Ваш бардак в этом случае раскладывается в более-менее нормальный вид. Нормализируется. Хотя это тоже не гарантия, что проблем не будет.

Вариант намба 3 (убогий, ваш): Нифига головой не подумать, а тупо пытаться "ул." (вот попереставляйте ул. в случае бул., а что в случае пр./пер./пл.?) переставлять из начала в конец. Офигеть. Но трындеть это жеж не работу делать... Более того, что даже свой вариант осилить не смогли, а за помощью прибежали...
21 фев 12, 10:01    [12127764]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
LiSeHoK
Member

Откуда: Свердловск
Сообщений: 6
уважаемый, вы таки мне объясняете что у меня в базе?:)
бул-ов, уул-ов и тому подобного у меня попросту нет. Посему и рассматривать это нет смысла.

и повторю ещё раз: сейчас пишется новая база, посему вылизывать старый вариант нет ни времени, ни желания, ни смысла.
пойми ты уже это наконец.
так что то, что советовал Mnior и даже местами то, что говорил ты - это бесспорно хорошо и полезно, но не в этом случае.


да, и это.. дыши глубже;)
22 фев 12, 04:23    [12134434]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
LiSeHoK, ну вот и ладно. Приходите еще.
22 фев 12, 09:32    [12134786]     Ответить | Цитировать Сообщить модератору
 Re: массовое изменение значения поля varchar mssql2000  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
+ LiSeHoK
LiSeHoK
и повторю ещё раз:
сейчас пишется новая база, посему вылизывать старый вариант нет ни времени, ни желания, ни смысла. пойми ты уже это наконец.
Один аргумент понятен, останое неверно - во всяком случае чтоб писать после этого "пойми ты уже это наконец".
LiSeHoK
так что то, что советовал Mnior - это бесспорно хорошо и полезно, но не в этом случае.
Ага.
Т.е. вам просто посоветовал:
1. RegEx-пы использовать в запросах
2. "внешними" средствами (обновить данные не через TSQL)
Не претендовал ни на что, не подходи и ладно. Но на это вы развели болтологию что мол это не совет, а "умничество".

Да вы просто напросто зажрались.

А споллер на то и споллер что необязательно, явно не основное, ну тем более что бы хай подывать. Так что сам себе буратино.
24 фев 12, 16:23    [12148199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить