Начало » Использование СУБД » Firebird, HQbird, InterBase » FB 2.5 replace
FB 2.5 replace [сообщение #6136] |
Mon, 07 July 2025 17:55  |
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
Сообщений: 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
Сообщений: 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
|
|
|
Переход к форуму:
Текущее время: Tue Jul 08 18:49:58 GMT+3 2025
Общее время, затраченное на создание страницы: 0.00822 секунд
|