Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
SELECT REPLACE('Заменить1 , Заменить2 , Заменить3',t.ЧтоЗаменить,t.Замена)
FROM t

результат в t-sql: 'Заменили1 , Заменили2 , Заменили3'
как такое делается в firebird? все перерыл
12 мар 18, 00:51    [21248321]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45112

RedGate
как такое делается в firebird?

Именно так и делается. doc/README.builtin_functions.txt

Posted via ActualForum NNTP Server 1.5

12 мар 18, 01:24    [21248353]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
SELECT @StrParam=REPLACE(@StrParam,t.ЧтоЗаменить,t.Замена)
FROM t

ну хорошо а как тогда вот это перевести на firebird
12 мар 18, 01:31    [21248357]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
RedGate
SELECT @StrParam=REPLACE(@StrParam,t.ЧтоЗаменить,t.Замена)
FROM t

ну хорошо а как тогда вот это перевести на firebird
FOR
    SELECT REPLACE(:StrParam, t.ЧтоЗаменить, t.Замена)
      FROM t
      INTO: StrParam
  DO
    BEGIN
    .
    .
    .
    END
12 мар 18, 03:12    [21248372]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
Да я видел эту конструкцию но я так и не понял как с ней работать.
Результатом for select будет n кол into:StrParam равное количеству записей в таблице t, а как же в конструкции DO это все соединить в единственную строку с замещенными значениями??
12 мар 18, 03:36    [21248374]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
RedGate, тут программист нужен...
Опиши параметр StrParam в результирующем наборе строк EXECUTE BLOCK'а, замени BEGIN...END в FOR на SUSPEND, подумай как инициализировать начальное значение StrParam и получишь тоже самое, что делает твой запрос на MySQL. В чем проблема?
FirebirdSQL Reference Manuals
12 мар 18, 09:24    [21248510]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
RedGate,

CREATE FUNCTION REPLACE_BY_TABLE(StrParam VARCHAR(4000)) RETURNS VARCHAR(4000)
AS
BEGIN
  FOR 
      SELECT t.ЧтоЗаменить, t.Замена
      FROM T
  AS CURSOR C DO 
  BEGIN
    StrParam=REPLACE(StrParam, C.ЧтоЗаменить, C.Замена);
  END
  RETURN StrParam; 
END
12 мар 18, 09:34    [21248533]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
Симонов Денис, а если у него v2.5? :)
12 мар 18, 09:50    [21248581]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
rdb_dev,

переделает на процедуру, и вместо ссылки на курсор переменные задействует.

З.Ы. t-sql это MS SQL, а не MySQL
12 мар 18, 09:58    [21248610]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
Симонов Денис, я и забыл, что он писал про Transact-SQL...
12 мар 18, 10:00    [21248615]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
Симонов Денис, у меня FB3
хоть в функции хоть в скрипте
FOR 
      SELECT t.ЧтоЗаменить, t.Замена
      FROM T
AS CURSOR C DO 
BEGIN
    StrParam=REPLACE(StrParam, C.ЧтоЗаменить, C.Замена);
END

ругается на тело begin/end
12 мар 18, 15:01    [21249938]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45112

RedGate
а как тогда вот это перевести на firebird

А что это странное выражение вообще делает? Просто выкинь "@StrParam=" и задача сводится к
предыдущей.

Posted via ActualForum NNTP Server 1.5

12 мар 18, 15:10    [21249968]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
RedGate,

да неужели? Текст ошибки предлагаешь телепатически угадать?
У тебя правда поля вот так называются "ЧтоЗаменить", "Замена"?
12 мар 18, 15:10    [21249970]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
Суть простая есть строка "'Заменить1 , Заменить2 , Заменить3'" надо заменить эти значения подстановкой из таблицы
в t-sql делается одной строкой
SELECT @StrParam=REPLACE(@StrParam,t.ЧтоЗаменить,t.Замена)
FROM t

В итоге должно получится StrParam="Заменили1 , Заменили2 , Заменили3"
Замучался я уже, почему не работает такая конструкция. Какие танцы с бубном еще надо станцевать?
SELECT REPLACE(:StrParam,t.ЧтоЗаменить,t.Замена)
FROM t
INTO :StrParam
12 мар 18, 15:17    [21249999]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
поля написал как пример, на англицком называются, ошибка тут
BEGIN
    StrParam=REPLACE(StrParam, C.ЧтоЗаменить, C.Замена);
END
12 мар 18, 15:20    [21250016]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45112

RedGate
почему не работает такая конструкция. Какие танцы с бубном еще надо станцевать?

Прочитать Language Reference. Потом убрать INTO.

Posted via ActualForum NNTP Server 1.5

12 мар 18, 15:24    [21250027]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
Dimitry Sibiryakov,

лично мне не понятно что вернёт в t-sql сия конструкция если в t будет больше одной записи
12 мар 18, 15:31    [21250049]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
СферическийКуб
Member

Откуда:
Сообщений: 83
Симонов Денис
Dimitry Sibiryakov,

лично мне не понятно что вернёт в t-sql сия конструкция если в t будет больше одной записи

В t-sql нет ошибки multiple rows in singleton select. Проходится вся таблица и берется последнее выбранное значение.
12 мар 18, 15:37    [21250086]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
Симонов Денис, в t-sql сия конструкция возвращает StrParam с замещенными значениями количество replacов равно количеству строк в выборки данной таблице
12 мар 18, 15:45    [21250119]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
RedGate,

у тебя вход и выход одна и так же переменная. Подставляется ли изменённое значение после первой записи на вход функции для второй записи? Если нет то достаточно

SELECT REPLACE(CAST(:StrParam AS VARCHAR(4000)),t.ЧтоЗаменить,t.Замена) AS StrParam 
FROM t
12 мар 18, 15:49    [21250134]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
hvlad
Member

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

точный текст ошибки где ?
12 мар 18, 15:50    [21250143]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
RedGate, на вопросы отвечать будем?
Симонов Денис
RedGate,

да неужели? Текст ошибки предлагаешь телепатически угадать?
У тебя правда поля вот так называются "ЧтоЗаменить", "Замена"?
12 мар 18, 15:50    [21250144]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2305
RedGate
Замучался я уже, почему не работает такая конструкция. Какие танцы с бубном еще надо станцевать?
Не надо никаких танцев с бубнами! Надо, всего лишь, прочесть Firebird 3.0 Language Reference от корки до корки или позвать программиста, который умеет читать.
12 мар 18, 15:54    [21250162]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
RedGate
Member

Откуда:
Сообщений: 22
Вы чего умничаете?
Я говорю что такая конструкция в t-sql, в одну строчку без созданий функций и процедур
SELECT @StrParam=REPLACE(@StrParam,t.ЧтоЗаменить,t.Замена)
FROM t

выдает переменную StrParam с замененными значениями которые взяты из таблицы t.
Вопрос был, как такое сделать в Firebird? Конструкция вида:
SELECT REPLACE(:StrParam, t.ЧтоЗаменить, t.Замена)
FROM t
INTO: StrParam

не работает.
И скажите мне страницу мануала где описана такая ситуация. Конструкция FOR SELECT требует для моей задачи еще 2 переменных в которые будут заносится значения после каждой итерации, что не приемлемо.
Если нельзя написать простую конструкцию так и скажите, чего пальцы то гнуть?
12 мар 18, 16:23    [21250289]     Ответить | Цитировать Сообщить модератору
 Re: Select Replace  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8116
RedGate,

я же тебе одним запросом показал 21250134, только значение надо извлекать не из переменной а из поля StrParam
Но если тебе не нужно решить свою задачу, можешь считать что это невозможно
12 мар 18, 16:28    [21250310]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить