Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 15:50   #1
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию Изменить данные в базе

Нужно в таблице изменить код города для всех записей, у которых этот код. Как это проще всего сделать?

Код города хранится в таблице контактов (KONTAKT) поле TELEPHON в следующем формате:
8(код)телефон
SlavaSH вне форума Ответить с цитированием
Старый 12.08.2009, 16:19   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

раз субд не указывается
то для Оракла

Код:
update KONTAKT
set TELEPHON = '8(' || 'your_new_code' || substr(TELEPHON, instr(TELEPHON, ')'), length(TELEPHON))
/*where TELEPHON like '8(095)%' */
закоментирован фильтр по телефонам с поределенным кодом (это если нужно изменить не все телефонные коды)
soleil@mmc вне форума Ответить с цитированием
Старый 12.08.2009, 16:39   #3
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
раз субд не указывается
то для Оракла

Код:
update KONTAKT
set TELEPHON = '8(' || 'your_new_code' || substr(TELEPHON, instr(TELEPHON, ')'), length(TELEPHON))
/*where TELEPHON like '8(095)%' */
закоментирован фильтр по телефонам с поределенным кодом (это если нужно изменить не все телефонные коды)
Вот такой вот код у меня получился:

Код:
UPDATE KONTAKT_ORG
SET TELEPHON = :tel_1 || substr(TELEPHON, instr(TELEPHON, ')'), length (TELEPHON))
WHERE (TELEPHON containing :tel_2)
И что-то ему length не понравилось:

Код:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 74.
length.
база данных Firebird. Что-то я ничего не понял как у вас так лихо получилось... я так предполагаю, что если у меня был телефон к примеру 8(111)345567 и я хочу заменить все коды 111 на 222, то после этой операции будет:
8(222)8(111)345567

Поясните, может я не понимаю....

Здесь нужно изменить телефоны с определенным кодом.
SlavaSH вне форума Ответить с цитированием
Старый 12.08.2009, 16:53   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ну это смотря что придет в параметр :tel_1 и :tel_2...
по-хорошему, :tel_1 => '8(222', :tel_2 => '8(111)'

length точно есть в ФБ
а вот substr и instr надо глянуть, возможно придется какую-нить полезную ЮДФ-ку прикрутить к базе
в будущем будет полезна еще многими фичами
soleil@mmc вне форума Ответить с цитированием
Старый 12.08.2009, 17:11   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
я так предполагаю, что если у меня был телефон к примеру 8(111)345567 и я хочу заменить все коды 111 на 222, то после этой операции будет:
8(222)8(111)345567
чтобы сделать так много мудрствовать не требуется
Код:
UPDATE KONTAKT_ORG
SET TELEPHON = :tel_1 || TELEPHON
WHERE (TELEPHON containing :tel_2)
но это же не то что реально нужно
soleil@mmc вне форума Ответить с цитированием
Старый 13.08.2009, 09:16   #6
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
ну это смотря что придет в параметр :tel_1 и :tel_2...
по-хорошему, :tel_1 => '8(222', :tel_2 => '8(111)'

length точно есть в ФБ
а вот substr и instr надо глянуть, возможно придется какую-нить полезную ЮДФ-ку прикрутить к базе
в будущем будет полезна еще многими фичами
я просто не понял как вот эта функция работает

substr(TELEPHON, instr(TELEPHON, ')'), length(TELEPHON)


то, что в ФБ есть функция length - это точно! просто видимо неправильный формат функции substr или instr

Посмотрите, пожалуйста, что не так может быть
SlavaSH вне форума Ответить с цитированием
Старый 13.08.2009, 12:56   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
то, что в ФБ есть функция length - это точно! просто видимо неправильный формат функции substr или instr

Посмотрите, пожалуйста, что не так может быть
у меня нет под рукой ФБ
лучше так - посмотрите сами синтаксис этих фунок
и если их там нет, то загрузите из ЮДФ-ки какой-нить коих полно на просторах рунета

суть такая
instr - находит позицию вхождения подстроки (в нашем случае ищем закрывающую скобку) в строке (по номеру телефона)
substr - копирует содержимое строки с указанного символа и указанное кол-во символов
soleil@mmc вне форума Ответить с цитированием
Старый 13.08.2009, 13:28   #8
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
у меня нет под рукой ФБ
лучше так - посмотрите сами синтаксис этих фунок
и если их там нет, то загрузите из ЮДФ-ки какой-нить коих полно на просторах рунета

суть такая
instr - находит позицию вхождения подстроки (в нашем случае ищем закрывающую скобку) в строке (по номеру телефона)
substr - копирует содержимое строки с указанного символа и указанное кол-во символов
да я понял суть... как раз то и проблема в том, что я не знаю аналог функций, которые Вы привели, в ФБ...
вместо функции substr там есть substring, но проблема в том, что в ФБ 1.5 в неё параметры нельзя вставлять, то есть должны быть числа, которые заранее известны.

А аналога функции instr или pos я не нашел
SlavaSH вне форума Ответить с цитированием
Старый 13.08.2009, 13:30   #9
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
у меня нет под рукой ФБ
лучше так - посмотрите сами синтаксис этих фунок
и если их там нет, то загрузите из ЮДФ-ки какой-нить коих полно на просторах рунета

суть такая
instr - находит позицию вхождения подстроки (в нашем случае ищем закрывающую скобку) в строке (по номеру телефона)
substr - копирует содержимое строки с указанного символа и указанное кол-во символов
что значит загрузить из ЮДФ-ки? это как?
SlavaSH вне форума Ответить с цитированием
Старый 13.08.2009, 13:43   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Код:
UPDATE KONTAKT_ORG
SET TELEPHON = :tel_1 || substr(TELEPHON, instr(TELEPHON, ')'), length (TELEPHON))
WHERE (TELEPHON containing :tel_2)
и где в выделенном куске кода нужны параметры?

про ЮДФ-ки читать здесь, примеры реализации брать к примеру здесь

если у тебя задача "одноразовая" и нужно заменить, например, код '095' на '495', или они все трехсимвольные, то достаточно будет такого запроса
Код:
UPDATE KONTAKT_ORG
SET TELEPHON = '8(495' || substr(TELEPHON, 6, length (TELEPHON))
WHERE (TELEPHON containing '8(095)')
и этттаа...
если ты не уверен в том что написал в запросе на апдейт, то лучше его прогони через селект
сразу будет видно где накосячил
а то потом придется придумывать как отапдейтить все твои косяки...

Код:
select 
  TELEPHON,
  '8(495' || substr(TELEPHON, 6, length (TELEPHON)) new_TELEPHON
from KONTAKT_ORG
WHERE (TELEPHON containing '8(095)')

Последний раз редактировалось soleil@mmc; 13.08.2009 в 13:52.
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP. Как изменить значение записи в MySQL базе данных SeRhy PHP 4 18.06.2009 12:21
Фильтр в базе Versifikator БД в Delphi 3 18.04.2008 10:35
Не могу изменить данные в DB aleksey_prm Помощь студентам 1 17.03.2008 08:21
Поиск по базе Антон Шестаков БД в Delphi 1 22.01.2008 20:32
Поиск по базе Таня84 БД в Delphi 3 09.02.2007 10:53