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

Начало » Использование СУБД » Firebird, HQbird, InterBase » Ошибка при конкантинации двух строковых столбцов UTF8
Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4584] Thu, 07 March 2024 11:19 Переход к следующему сообщению
svd в настоящее время не в онлайне  svd
Сообщений: 49
Зарегистрирован: November 2022
Member
Всем привет.

FB2.5, Win10 x64 - если это играет роль.

Пытаюсь выполнить запрос
select
    case coalesce(a.GName,'')
      when ('') then a.Name
      else a.GName
    end || ' ' || coalesce(a.STRENGTH,''),
    a.DForm As Form,
    a.Packsize,
    a.artikelcode,
    a.IstAnzahl,
    a.FreiAnzahl,
    a.Flags,
    g.generickey,
    MaxSchacht,
    a.MinMenge,a.MaxMenge,a.MinLagerTemp,a.MaxLagerTemp,a.barcode,
    coalesce(a.CD,0),
    a.Aht,
    a.unfit,
    a.deleteflag,
    A.serialnumbersinceexpirydate,
    A.gname,
    A.genericid
  from ARTIKEL a, GENERICS g
    where a.Artikelcode not in('','-1','0','?') and
          a.Artikelcode not starting with '@'   and
          a.genericid = g.id
и получаю Arithmetic exception. При этом чистая таблица показывается без проблем. Как только убираю конкантинацию в первом столбце, то тже показывает без проблем.
Что делаю не так?
  • Вложение: MEDIMAT-rest.zip
    (Размер: 251.42KB, Загружено 468 раз)
Re: Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4585 является ответом на сообщение #4584] Thu, 07 March 2024 11:51 Переход к предыдущему сообщениюПереход к следующему сообщению
 в настоящее время не в онлайне 
Сообщений: 197
Зарегистрирован: September 2022
Senior Member
Кастуй результат конкатенации к строке достаточного размера.
Re: Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4586 является ответом на сообщение #4585] Thu, 07 March 2024 12:04 Переход к предыдущему сообщениюПереход к следующему сообщению
svd в настоящее время не в онлайне  svd
Сообщений: 49
Зарегистрирован: November 2022
Member
Это как?
что то типа
select cast(a.gname as varchar(100))|| coalesce(a.STRENGTH,'') 
?

Сесли делать так, то выкидывает эксепшен.

Но вот
select
    trim( substring(a.gname from 1 for 100)) ||' '|| coalesce(a.STRENGTH,''),
показывает без проблем

[Обновления: Thu, 07 March 2024 13:38]

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

Re: Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4593 является ответом на сообщение #4586] Thu, 07 March 2024 15:54 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Ты вообще неправильно используешь coalesce. Просто указывай
coalesce(a.GName, a.Name, '')
. И перейди на что-нибудь не настолько окаменелое.
Re: Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4594 является ответом на сообщение #4593] Thu, 07 March 2024 16:00 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Это не эквивалентная запись. Строка может быть и пустой. У самого есть подобные конструкции.
Ранее писал coalesce(nullif(string_field1, ''), string_field2)
Сейчас завел для таких выражений отдельную функцию
Re: Ошибка при конкантинации двух строковых столбцов UTF8 [сообщение #4597 является ответом на сообщение #4593] Thu, 07 March 2024 16:40 Переход к предыдущему сообщению
svd в настоящее время не в онлайне  svd
Сообщений: 49
Зарегистрирован: November 2022
Member
Да вопрос не в том, что можно в coalesce много параметров пасать, а в то м что конкантинация строк как-то ненорманоно работает при простой конкантинацией. cast(column as varchar(100)) тоже подвержен этой болезни. А вот substring(column from 1 to 100) оказалась внезапно на высоте. Выглядит как этакий костыль.


Цитата:
И перейди на что-нибудь не настолько окаменелое.
вот как раз думаю над этим. Мешают "зарезервированные слова", проверка оборудование на совместимость с новой версией и пр.
Предыдущая тема: Релиз Firebird 5.0
Следующая тема: Firebird -a
Переход к форуму:
  


Текущее время: Tue Dec 03 20:14:42 GMT+3 2024

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