SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » FB 2.5 replace
FB 2.5 replace [сообщение #6136] Mon, 07 July 2025 17:55 Переход к следующему сообщению
DarkMaster в настоящее время не в онлайне  DarkMaster
Сообщений: 42
Зарегистрирован: August 2022
Member
Други, дурацкий вопрос возник.

Есть старенький FB 2.5.8. Задача - сменить в блобе CRLF на <br>.
Делаю по науке:
declare cr varchar(1);

cr=ascii_char(13);
blob=replace(:blob,:cr,'<br>');  <---  облом - arithmetic bla-bla, string truncation etc....
по старому:
blob=replace(:blob,'
','<br>');                       <--- все ок
но:
declare cr varchar(10);

cr=ascii_char(13);
blob=replace(:blob,:cr,'<br>');  <-- тоже все ок
Собственно вопрос - почему при varchar(1) облом выходит? Что-то такое всплывало, но что - не помню. Собственно чисто академический вопрос - пуркуа?
Re: FB 2.5 replace [сообщение #6137 является ответом на сообщение #6136] Mon, 07 July 2025 18:40 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 85
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
На всякий случай CRLF <> ascii_char(13). CRLF = #13 + #10
Мне кажется при замене происходит приведение третьего параметра к типу второго, и получаем отлуп.
Скорее всего начнет работать только начиная с VARCHAR(4).
А в случае когда используется строковый литерал, тогда тип определяется как максимальный (char(4))

[Обновления: Mon, 07 July 2025 18:43]

Известить модератора

Re: FB 2.5 replace [сообщение #6138 является ответом на сообщение #6137] Tue, 08 July 2025 14:59 Переход к предыдущему сообщению
DarkMaster в настоящее время не в онлайне  DarkMaster
Сообщений: 42
Зарегистрирован: August 2022
Member
Не уверен, что это именно приведение типов. Такой блок срабатывает нормально. Ну да ладно - в список казусов занес, буду помнить...

execute block
returns (s varchar(1024))
as
declare variable afrom varchar(1);
declare variable ato varchar(4);
begin
  s='AAAABBBBBCCCCCDDDD';
  afrom='A';
  ato='aaaa';
  s=replace(s,afrom,ato);
  suspend;
end
Предыдущая тема: Официальная сертификация Firebird Foundation на конференции по СУБД Firebird
Следующая тема: Полнотекстовый поиск для Firebird
Переход к форуму:
  


Текущее время: Tue Jul 08 17:38:01 GMT+3 2025

Общее время, затраченное на создание страницы: 0.00717 секунд