Текущий архив: 2008.08.24;
Скачать: CL | DM;
Вниз
Отождествление пустой строки и NULL Найти похожие ветки
← →
Игорь Шевченко © (2008-07-01 16:20) [40]Если пример [23] дополнить:
я@ora10> create unique index yyy on xxx(a);
Index created.
я@ora10> select * from xxx order by a;
A
----------
1
2
3
4
я@ora10> insert into xxx values(NULL);
1 row created.
я@ora10> select * from xxx order by a;
A
----------
1
2
3
4
6 rows selected.Execution Plan
----------------------------------------------------------
Plan hash value: 4016984797
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6 | 78 | 4 (25)| 00:00:01 |
| 1 | SORT ORDER BY | | 6 | 78 | 4 (25)| 00:00:01 |
| 2 | TABLE ACCESS FULL| XXX | 6 | 78 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Видно, что индекс игнорируется, потому что есть значения NULL, а запрошены все записи.
но:
я@ora10>select * from xxx where a is not null order by a
A
----------
1
2
3
4Execution Plan
----------------------------------------------------------
Plan hash value: 2441963755
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 52 | 1 (0)| 00:00:01 |
|* 1 | INDEX FULL SCAN | YYY | 4 | 52 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
← →
pasha_golub © (2008-07-01 16:21) [41]
> atruhin1 (01.07.08 16:15) [36]
> а про IBX для Interbase/Firebird ты не прав, в IB/FB и
> соответственно,
> в компонентах это абсолютно разные вещи.
Прошу прощения. Я сам не проверял. Все со слов пользователя.
← →
pasha_golub © (2008-07-01 16:25) [42]А еще один довод от пользователя.
CREATE TABLE ..(
somecol char(1) CHECK somecol in ("M", "W")
)
И соответственно в таком виде NULL позволяется, а пользователь не может его вставить через грид или другой какой контрол.
← →
Игорь Шевченко © (2008-07-01 16:26) [43]
> И соответственно в таком виде NULL позволяется
не позволяется. Он вызывает нарушение ограничения :)
← →
McSimm © (2008-07-01 16:28) [44]Всякое бывает.
Другой какой-нибудь контрол обработает, к примеру, Ctrl-Del и отобразит [NULL]
← →
Ega23 © (2008-07-01 16:30) [45]
somecol char(1) CHECK somecol in ("M", "W")
А где "Ребёнок" и "Домашнее жЫвотное"? :)
← →
pasha_golub © (2008-07-01 16:31) [46]
> Игорь Шевченко © (01.07.08 16:26) [43]
>
> не позволяется. Он вызывает нарушение ограничения :)
Не знаю как в Оракле, но в Постгресе не вызовет
← →
pasha_golub © (2008-07-01 16:32) [47]
> McSimm © (01.07.08 16:28) [44]
> Другой какой-нибудь контрол обработает, к примеру, Ctrl-
> Del и отобразит [NULL]
И ведь не поспоришь.
> Ega23 © (01.07.08 16:30) [45]
> А где "Ребёнок" и "Домашнее жЫвотное"? :)
Не догадалсо. :) я обычно пишу M\F (male\female), однако есть еще люди которым ближе man\woman :)
← →
pasha_golub © (2008-07-01 16:34) [48]Кстати, по поводу приведенного примера я чего еще задумался. Ведь char(1) должен состоять из одного символа и точка. Это ведь не varchar(1). То есть в таком случае было бы может и логично пустую строку возводить в статус NULL, однако в случае varchar религия имеет место быть.
← →
Игорь Шевченко © (2008-07-01 16:37) [49]
> я обычно пишу M\F (male\female),
sometimes camel
> Это ведь не varchar(1).
varchar(1) тоже состоит из одного символа и точка. Из половины символа он состоять не может. В оракле так они даже хранятся одинаково char(1) и varchar(1)
← →
Anatoly Podgoretsky © (2008-07-01 16:37) [50]> pasha_golub (01.07.2008 15:07:00) [0]
TDataset говоришь?
Так ничего не выйдет, пустая строка равна nil и никакой структуры строки. Не возможно представить строку по другому как пустое в Дельфи. В базе может и можно.
← →
Anatoly Podgoretsky © (2008-07-01 16:39) [51]> pasha_golub (01.07.2008 15:18:04) [4]
А где тут TDataset?
При том это всего лишь особенность получается при присвоение значения и обратно никак, только если специально присвоить NULL.
А этим NULL <> NULL ты что хотел сказать?
← →
Anatoly Podgoretsky © (2008-07-01 16:40) [52]> Ega23 (01.07.2008 15:20:06) [6]
В вопросе на клиенте, и при том для типа string
А дальше пошел какой то разброд, уже далекий от вопроса.
← →
Anatoly Podgoretsky © (2008-07-01 16:41) [53]> Ega23 (01.07.2008 15:32:08) [8]
> ftString - то при Null-значении показывать ""
А это как, хочешь Дельфи переписать?
← →
Ega23 © (2008-07-01 16:41) [54]
> sometimes camel
>
упалпацтул!!!
КЛАСС!!!! :)))))))))))))
← →
Anatoly Podgoretsky © (2008-07-01 16:43) [55]> pasha_golub (01.07.2008 15:07:00) [0]
Кстати ты собираешься ограничиться только этими серверами? И где в них там TDataset
← →
Anatoly Podgoretsky © (2008-07-01 16:45) [56]> Ega23 (01.07.2008 15:44:16) [16]
Так не все же архитекторы грамотные.
Кстати как насчет минуса? Тоже не так одназначно.
← →
Anatoly Podgoretsky © (2008-07-01 16:46) [57]> Ega23 (01.07.2008 15:47:19) [19]
Ага значит все таки о конкретных серверах будем говорить, тогда посмотри ANSII настройки. В частности SET NULLS в БОЛ
← →
Anatoly Podgoretsky © (2008-07-01 16:49) [58]> Игорь Шевченко (01.07.2008 15:48:21) [21]
Разные вещи, NULL соответствует определению ANSI если только поведение не изменено для ANSI настроек, пошли кое где на поводу старого матобоеспечения (FoxPro например, а это у них основной носитель для импорта/экспорта).
Про Oracle молчим, Oracle и стандарты, это рок против наркотиков.
← →
Anatoly Podgoretsky © (2008-07-01 16:51) [59]> Игорь Шевченко (01.07.2008 16:01:28) [28]
Твое предположение верно, может тебе попадались обсуждения с разработчиками по этому поводу.
← →
Anatoly Podgoretsky © (2008-07-01 16:52) [60]> pasha_golub (01.07.2008 16:08:29) [29]
Видишь ли МС не кладет, а позволяет управлять этим, а насколько я помню Оракл именно кладет. При том вроде и не последовательны.
← →
Anatoly Podgoretsky © (2008-07-01 16:54) [61]> McSimm (01.07.2008 16:09:31) [31]
Пустым ты что в данном случае считаешь, если "" то по стандарту одну можно. А если NULL то по стандарту ни одно, поскольку NULL это не определено, то оно и не может представлять собой конкретную строку, а вот пустая строка может.
← →
Anatoly Podgoretsky © (2008-07-01 16:55) [62]> Игорь Шевченко (01.07.2008 16:13:33) [33]
> Оракл появился немного раньше стандартов.
И вырос в такого монстра, что плевал на всех, он сам себе стандарт.
← →
Anatoly Podgoretsky © (2008-07-01 16:57) [63]> atruhin1 (01.07.2008 16:15:36) [36]
> Иногда удобно, иногда нет.
Вот это не должно быть основанием, поскольку результаты не гарантируются, не пройдет даже тестов.
← →
McSimm © (2008-07-01 16:58) [64]
> Пустым ты что в данном случае считаешь, если "" то по стандарту
> одну можно. А если NULL то по стандарту ни одно, поскольку
> NULL это не определено
Так вопрос про Оракл был, где "" и NULL суть одно.
Насчет стандарта - не совсем понял. Unique key, насколько я с ними сталкивался, позволяет хранить NULL в любом количестве.
← →
Ega23 © (2008-07-01 17:01) [65]
> Unique key, насколько я с ними сталкивался, позволяет хранить
> NULL в любом количестве.
Короче, была какая-то фигня с Null. То ли с FTS, то ли с индексом...
В смысле, что только одно значение null в столбце на всю таблицу.
← →
Игорь Шевченко © (2008-07-01 17:23) [66]Anatoly Podgoretsky © (01.07.08 16:55) [62]
> И вырос в такого монстра, что плевал на всех, он сам себе
> стандарт.
Насколько мне известно, стандарту целиком и полностью не соответствует ни одна СУБД. У каждой есть свои расширения, отходящие от стандарта.
Кстати, сам Оракл пишет в документации:
"Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls."
← →
Поросенок Винни-Пух © (2008-07-01 17:37) [67]то оно и не может представлять собой конкретную строку, а вот пустая строка может.
Если пустая строка может представлять конкретную строку ("равноправное" значение строкового типа), то тогда было бы возможно определить сколько именно таких значений содержится в этом посте.
А этого никто определить не сможет.
← →
McSimm © (2008-07-01 17:44) [68]
> сколько именно таких значений содержится в этом посте.
Я могу это определить.
Этот пост представляет собой запись из нескольких полей (некоторые отображаются, некоторые нет). Из отображаемых - одно поле представляет собой пустую строку.
А дробить одно поле - некорректно. Или придется считать количество нулей в числе 17.
← →
Поросенок Винни-Пух © (2008-07-01 17:48) [69]Я могу это определить.
Допустим.
Определил, что из там 10.
А я утверждаю что изх там 1000.
Как определить кто прав?
← →
McSimm © (2008-07-01 17:53) [70]
> Как определить кто прав?
гм... я даже теряюсь... при таком подходе остается только назначить незаинтересованных арбитров и спросить кому они больше верят :)
Я даже могу предоставить саму запись на рассмотрение (хотя ее и так видно)
name: "Поросенок Винни-Пух",
email: "",
ip: "**.***.**.***"
и т.д.
← →
McSimm © (2008-07-01 17:58) [71]есть еще вариант, спросить у perl
# smth like this
foreach (keys %fields) {
$count++ if ($REC{$_} eq "");
}
← →
Поросенок Винни-Пух © (2008-07-01 18:02) [72]ну зачем же отмахиваться от простого вопроса?
есть два строковых литерала, один пустой;
я с помошью нескольких конкатенаций делаю из них итоговую строку.
вопрос: определить по итоговой строке сколько раз я в нее вставил пустой литерал.
← →
pasha_golub © (2008-07-01 18:07) [73]
> Поросенок Винни-Пух © (01.07.08 17:37) [67]
> Если пустая строка может представлять конкретную строку
> ("равноправное" значение строкового типа), то тогда было
> бы возможно определить сколько именно таких значений содержится
> в этом посте.
Нелогично размышляете. Я уже писал что пустая строка есть инвариант по отношению к операции конкатенации. Можно провести паралели с каноническим разложением числа на множители (сорри если коряво звучит, учил на украинском), коее имеет вид a = p1^n1*p2^n2...*pk^nk*E, где pi - простые числа неравные 1.
← →
McSimm © (2008-07-01 18:08) [74]
> ну зачем же отмахиваться от простого вопроса?
> есть два строковых литерала, один пустой;
> я с помошью нескольких конкатенаций делаю из них итоговую
> строку.
> вопрос: определить по итоговой строке сколько раз я в нее
> вставил пустой литерал.
Я уже писал про количество нулей в числе 17.
← →
pasha_golub © (2008-07-01 18:09) [75]
> Поросенок Винни-Пух © (01.07.08 18:02) [72]
> есть два строковых литерала, один пустой;
> я с помошью нескольких конкатенаций делаю из них итоговую
> строку.
> вопрос: определить по итоговой строке сколько раз я в нее
> вставил пустой литерал.
Есть два слагаемых, один из них 0. Я с помощью некоторых операций сложения делаю из них сумму.
Вопрос: определить по итоговой сумме сколько раз я прибавил 0
← →
McSimm © (2008-07-01 18:09) [76]Поле содержит одно значение. Можно считать сколько значений содержит запись или выборка. Какой смысл считать количество значений в одном поле ? (то же - в одной переменной) ?
← →
Поросенок Винни-Пух © (2008-07-01 18:10) [77]Я уже писал про количество нулей в числе 17.
не надо путать публику.
было сказано, что пустая строка - это точно такое же значение строкового типа, как и любая другая строка.
Так что это за значение такое, если его нельзя обнаружить и посчитать?
← →
McSimm © (2008-07-01 18:13) [78]И, кстати о конкатенациях, сколько значений "АА" содержится в строке "АААА" - два или три ?
← →
McSimm © (2008-07-01 18:14) [79]
> пустая строка - это точно такое же значение строкового типа,
> как и любая другая строка.
Равно как и 0 мало отличается от любого другого числового значения.
← →
McSimm © (2008-07-01 18:14) [80]
> И, кстати о конкатенациях, сколько значений "АА" содержится
> в строке "АААА" - два или три ?
Правильный ответ - ни одного
Страницы: 1 2 3 4 5 6 вся ветка
Текущий архив: 2008.08.24;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.031 c