|
|
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Генерирую запрос на "деликатное" копирование данных из одной таблицы в другую - заполняются только поля, содержащие NULL или пустую строку. Список полей генерируется скопом, добавлять туда фильтрацию и проверки не хочется. Всего полей может быть до полутора десятков. Задача: В запросе для любых полей определить, что поле содержит пустую строку. Проблемы: 1) Поля нестроковых типов при сравнении с '' выбрасывают ошибку 2) CAST требует указания длины, т.е. нельзя преобразовать в "Строку произвольного размера" - а значит, длина должна быть такой, чтобы влезло самое длинное поле. Пока додумался только до такого варианта: Код: sql 1. 2. 3. 4. Вариант с обращением к системным таблицам для получения типа поля - приходил в голову, был отброшен как слишком громоздкий. Вариант проверки типа поля в программе - приходил в голову, но не очень привлекает, оставлен про запас. Может, кто-то посоветует решение поэлегантнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 15:57 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
upd - FB 2.5 - запрос нечастый, не страшно, если будет тормозить (в разумных пределах, конечно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:01 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalМожет, кто-то посоветует решение поэлегантнее? MERGE+CASE Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:11 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Проверку, что поле менять не надо, следует добавить в WHERE. Ибо нефиг апдейтить само себя, лишнее это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:12 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
WildSery В WHERE не получится. Обновить надо конкретную запись, но, возможно, не все поля. Dimitry Sibiryakov Спасибо, гляну ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:19 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
WildSery или ты имеешь в виду выполнять по одному update на каждое поле? Это перебор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:20 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov просьба пояснить. Пока не могу определить, чем может помочь MERGE. Насколько я понял, он просто упаковывает update и insert в одну конструкцию. Но мне как раз не нужно вставлять, а только обновлять по условию. А вопрос как раз в условии, как проверить, что поле надо обновлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:28 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalСписок полей генерируется скопом, добавлять туда фильтрацию и проверки не хочется. А в чём проблема-то добавить туда проверку на тип поля?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:31 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutalпросьба пояснить. Пока не могу определить, чем может помочь MERGE. Код: sql 1. 2. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 16:33 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
авторА в чём проблема-то добавить туда проверку на тип поля?.. Хотелось шуровать все в запрос без дополнительных ветвлений. авторmerge into aTable using bTable on ... when match set aField=coalesce(aTable.aField, bTable.aField); Так coalesce только на нуллы работает же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 17:42 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, ну так добавь ещё NULLIF(aTable.aField, '') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 17:45 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalХотелось шуровать все в запрос без дополнительных ветвлений. Боишься пальцы стереть, набирая на две строчки кода больше?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 17:49 |
|
||
|
Проверка, что поле - строковое, и не содержит пустую строку
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Хороший вариант, но на не-строковых не сработает (conversion error from string) Dimitry Sibiryakov Любопытно узнать, решаема ли задача исключительно средствами sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 18:23 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38667853&tid=1563519]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 446ms |

| 0 / 0 |
