powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проверка, что поле - строковое, и не содержит пустую строку
13 сообщений из 13, страница 1 из 1
Проверка, что поле - строковое, и не содержит пустую строку
    #38667808
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Генерирую запрос на "деликатное" копирование данных из одной таблицы в другую - заполняются только поля, содержащие NULL или пустую строку. Список полей генерируется скопом, добавлять туда фильтрацию и проверки не хочется. Всего полей может быть до полутора десятков.

Задача:
В запросе для любых полей определить, что поле содержит пустую строку.

Проблемы:
1) Поля нестроковых типов при сравнении с '' выбрасывают ошибку
2) CAST требует указания длины, т.е. нельзя преобразовать в "Строку произвольного размера" - а значит, длина должна быть такой, чтобы влезло самое длинное поле.

Пока додумался только до такого варианта:
Код: sql
1.
2.
3.
4.
UPDATE aTable
  SET aField = IIF((aField IS NOT NULL) AND (CAST(aField AS VARCHAR(32765)) <> ''), aField, :aField),
  ...
  WHERE ...



Вариант с обращением к системным таблицам для получения типа поля - приходил в голову, был отброшен как слишком громоздкий.
Вариант проверки типа поля в программе - приходил в голову, но не очень привлекает, оставлен про запас.

Может, кто-то посоветует решение поэлегантнее?
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667818
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
upd
- FB 2.5
- запрос нечастый, не страшно, если будет тормозить (в разумных пределах, конечно)
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667841
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalМожет, кто-то посоветует решение поэлегантнее?
MERGE+CASE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667844
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверку, что поле менять не надо, следует добавить в WHERE.
Ибо нефиг апдейтить само себя, лишнее это.
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667851
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery
В WHERE не получится. Обновить надо конкретную запись, но, возможно, не все поля.

Dimitry Sibiryakov
Спасибо, гляну
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667853
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery
или ты имеешь в виду выполнять по одному update на каждое поле? Это перебор :)
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667861
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
просьба пояснить. Пока не могу определить, чем может помочь MERGE. Насколько я понял, он просто упаковывает update и insert в одну конструкцию. Но мне как раз не нужно вставлять, а только обновлять по условию. А вопрос как раз в условии, как проверить, что поле надо обновлять.
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667869
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalСписок полей генерируется скопом, добавлять туда фильтрацию и проверки
не хочется.
А в чём проблема-то добавить туда проверку на тип поля?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667871
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalпросьба пояснить. Пока не могу определить, чем может помочь MERGE.

Код: sql
1.
2.
merge into aTable using bTable on ...
when match set aField=coalesce(aTable.aField, bTable.aField);


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667962
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА в чём проблема-то добавить туда проверку на тип поля?..
Хотелось шуровать все в запрос без дополнительных ветвлений.
авторmerge into aTable using bTable on ...
when match set aField=coalesce(aTable.aField, bTable.aField);
Так coalesce только на нуллы работает же.
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667966
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

ну так добавь ещё NULLIF(aTable.aField, '')
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38667973
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalХотелось шуровать все в запрос без дополнительных ветвлений.
Боишься пальцы стереть, набирая на две строчки кода больше?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проверка, что поле - строковое, и не содержит пустую строку
    #38668013
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
Хороший вариант, но на не-строковых не сработает (conversion error from string)

Dimitry Sibiryakov
Любопытно узнать, решаема ли задача исключительно средствами sql
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проверка, что поле - строковое, и не содержит пустую строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]