Форум: "Базы";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизSQL-запрос. Найти похожие ветки
← →
worldmen © (2006-05-04 18:30) [0]Есть запрос. (Oracle)
В одном столбце есть некоторые пустые строки (правильно). Но нужно вместо всех пустых строк подставить определенное значение. Как?
← →
ANB © (2006-05-04 18:42) [1]update Table1 set Fld1 = "Значение" where Fld1 is null
← →
jack128 © (2006-05-04 18:44) [2]видимо, что то типа этого:
update MyTable
set
MyField = ""
where
MyField = :OldMyField
← →
jack128 © (2006-05-04 18:45) [3]jack128 © (04.05.06 18:44) [2]
в смысле наоборот :-)
update MyTable
set
MyField = :OldMyField
where
MyField = ""
ANB © (04.05.06 18:42) [1]
смотря что считать пустыми строками :-)
← →
worldmen © (2006-05-04 18:46) [4]> ANB
Мне нужно не в базе изменить, а в отчете так вывести. при том, что в базе ничего не измениться.
← →
ANB © (2006-05-04 18:46) [5]
> update MyTable
> set
> MyField = :OldMyField
> where
> MyField = ""
Не отработает. Оракл пустые строки прибивает в Null.
← →
ANB © (2006-05-04 18:47) [6]
> worldmen © (04.05.06 18:46) [4]
Так бы сразу и сказал
select NVL(Fld1,"Пусто") from Table1
← →
worldmen © (2006-05-04 18:57) [7]
> ANB © (04.05.06 18:47) [6]
А синтаксис у нее какой?
← →
worldmen © (2006-05-04 19:00) [8]Нашел
В Oracle есть функция NVL. Синтаксис NVL(<если значение null>,<заменить на>). К примеру NVL(null,""). Наверное что-то подобное есть в Мускуле. Или ифами проверяй.
← →
Desdechado © (2006-05-04 19:04) [9]помни, что для оракла строка нулевой длины (не пробел) равнозначна null
о чем в ANB © (04.05.06 18:46) [5] сказано
← →
worldmen © (2006-05-04 19:20) [10]Странно, но NVL не работает. Выводит по прежнему пустые строки.
Select ...,..,...,
(select nvl(ee.bank_mfo,"111111") from external_document ee where d.id = ee.id) MFO,
...,
From
...,
Where
....
Как выводило две строки пустые так и выводит.
Попробовал проверить и изменил запрос, вставил:e.bank_mfo is null
вывело эти две строки, т.е. они равны null
← →
ANB © (2006-05-04 19:38) [11]Select ...,..,...,
(select nvl(min(ee.bank_mfo),"111111") from external_document ee where d.id = ee.id) MFO,
...,
From
...,
Where
....
← →
worldmen © (2006-05-04 19:42) [12]Работает. Спасибо > ANB ©
← →
ANB © (2006-05-04 20:33) [13]
> worldmen © (04.05.06 19:42) [12]
Странно, что у тебя вообще запрос выполнялся.
← →
jack128 © (2006-05-05 00:36) [14]ANB © (04.05.06 18:46) [5]
Оракл пустые строки прибивает в Null.
Круто!
← →
Reindeer Moss Eater © (2006-05-05 00:57) [15]select nvl(trim(ee.bank_mfo),"111111")
у тебя там в поле честные пробелы, раз nvl не возвращает "111111"
← →
ANB © (2006-05-05 09:36) [16]
> Reindeer Moss Eater © (05.05.06 00:57) [15]
Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.
ЗЫ. Использовать min или max в скалярных запросах оракла - правило хорошего тона.
← →
evvcom © (2006-05-05 09:53) [17]Я бы так и вовсе переделал select from select на select с left join без min, но скорее всего с trim.
← →
ANB © (2006-05-05 10:28) [18]
> evvcom © (05.05.06 09:53) [17]
А если записей в external_document может быть больше одной ?
У скалярных запросов и лефт джойна разные области применения.
← →
evvcom © (2006-05-05 11:23) [19]
> У скалярных запросов и лефт джойна разные области применения.
Согласен, но с областью применения в данном топике мы еще толком и не разобрались.
> А если записей в external_document может быть больше одной ?
Тогда вернется записей больше одной, что, ИМХО, более правильно. А то на каком основании мы решаем, что должна вернуться запись min(ee.bank_mfo)? Почему не max(ee.bank_mfo)? Или вообще какая-нить из середины? В случае нужды всего в одной записи условие выборки соответственно должно быть усложнено.
Повторюсь, что мы не знаем всех условий задачи, потому остается только гадать и предполагать.
← →
ANB © (2006-05-05 12:16) [20]
> Повторюсь, что мы не знаем всех условий задачи, потому остается
> только гадать и предполагать.
Абсолютно прав. Но автор уже решил свою проблему, посему обсуждение предлагаю прекратить.
← →
Reindeer Moss Eater © (2006-05-05 13:13) [21]Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.
Остается найти обяснение почему NVL не видел нула в пустом поле открытого соединения.
← →
Sam Stone © (2006-05-05 14:19) [22]Может потому что дефолтное значение на строку не null, а "" указано?
← →
Reindeer Moss Eater © (2006-05-05 14:34) [23]Для Оракла это эквивалентные вещи.
Вставив в таблицу 10 явных нулов и 10 явных пустых строк вы никогда не сочитаете после вставки чего там и сколько.
Будет 20 строк с нулами
← →
ANB © (2006-05-05 16:13) [24]
> Reindeer Moss Eater © (05.05.06 13:13) [21]
NVL сработал во время выполнения запроса, а если скалярный запрос используется в селековой части, и не вернул строк, то его результат - всегда Null. Можно было бы NVL вынести за скобки и тогда бы он это понял.
Старая грабля и некорректный с самого начала запрос.
← →
ANB © (2006-05-05 16:14) [25]
> некорректный с самого начала запрос.
Некоректный вопрос автора !!! Это не к
> Reindeer Moss Eater © (05.05.06 13:13) [21]
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c