Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 19 20 21 22 23 [24] 25 26 27 28 .. 31   вперед  Ctrl
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7078
softwarer
alex-ls
В каких версиях Вы это встречали? Я начал работать с восьмерки, не слышал о такой дури...

Вы меня удивляете...

Я сам себя частенько удивляю, как в плохую, так и в хорошую сторону.
Но здесь Вы не правы, а думал сравнивают апострофы и кавычки с null, в последующий постах исправился.
21 янв 05, 12:18    [1263790]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
Gluk (Kazan)
Можно ссылку на то место в стандарте где сказано, что null и пустая строка НЕ ОДНО И ТО ЖЕ ???


Именно такой фразы там нет, разумеется. Но то, что любой предикат, кроме IS [NOT] NULL и IS [NOT] DISTINCT FROM, должен при сравнении с NULLом возвращать UNKNOWN, там прописано явно. А UNKNOWN в случае конвертации в двухзначную логику превращается в FALSE.

Формально, тут вопрос в другом. Через что определяется ваше "одно и то же"? Если через предикат равенства, то NULL и пустая строка - разные вещи. Но в этом случае два NULLа тоже различны между собой, ибо (NULL = NULL) => FALSE. Но те же два NULLа являются "одним и тем же" через предикаты IS NULL или DISTINCT, например. Впрочем, пустая строка не является эквивалентом NULLу ни через какой предикат сравнения, так что вопрос можно закрывать.
21 янв 05, 12:20    [1263797]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Вы уж определитесь, UNKNOWN или NULL, логика то трехзначная.
И зачем позвольте спросить переводить ее в двузначную логику ?
Вообще не правильно говорить что null равен или не равен чему либо. Результатом будет NULL. Не True, не False, а именно null.
21 янв 05, 12:31    [1263875]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
При group или distinct null-ы сливаются и это удобно. Посмотрел бы я на Вас при другом раскладе Еще раз повторю, что говорить:

автор
(NULL = NULL) => FALSE


Безграмотно

NULL=NULL=>NULL
21 янв 05, 12:34    [1263901]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
Gluk (Kazan)
Вы уж определитесь, UNKNOWN или NULL, логика то трехзначная.


Стандартный тип BOOLEAN имеет три возможных значения - TRUE, FALSE и UNKNOWN. Но там же сказано, что UNKNOWN и NULL взаимозаменямы. Обычно, когда рассматриваются значения, то говорят о NULL, а когда о результате вычисления логического условия, то об UNKNOWN. Это не мешает логике быть трехзначной ;-)

Gluk (Kazan)
И зачем позвольте спросить переводить ее в двузначную логику ?


IF (NULL = NULL) THEN <a>
ELSE <b>

какая секция по вашему должна выполниться? Неужели ни одна из них? Вот именно для таких случаев NULL/UNKNOWN превращается в FALSE.
21 янв 05, 12:48    [1263984]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
Gluk (Kazan)
При group или distinct null-ы сливаются и это удобно. Посмотрел бы я на Вас при другом раскладе


Как GROUP BY, так и DISTINCT, работают через предикат DISTINCT, в котором:

1 IS DISTINCT FROM 2 = TRUE
1 IS NOT DISTINCT FROM 1 = TRUE
NULL IS DISTINCT FROM 1 = TRUE
NULL IS NOT DISTINCT FROM NULL = TRUE

Может, сначала почитаете спецификацию, а потом будете смеяться на чужими словами?

Gluk (Kazan)
Еще раз повторю, что говорить:

автор
(NULL = NULL) => FALSE


Безграмотно

NULL=NULL=>NULL


На это я уже ответил.
21 янв 05, 12:53    [1264013]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
dimitr
IF (NULL = NULL) THEN <a>
ELSE <b>

какая секция по вашему должна выполниться? Неужели ни одна из них? Вот именно для таких случаев NULL/UNKNOWN превращается в FALSE.


И где Вы видели в SQL оператор IF ?

P.S. Спасибо за заботу, но смеятся я буду над тем, над чем сочту нужным :)
21 янв 05, 13:01    [1264067]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67475
Блог
Gluk (Kazan)
И где Вы видели в SQL оператор IF ?

В SQL он называется CASE.
21 янв 05, 13:19    [1264173]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7078
Вот Вам, чтоб не подрались цитата из "руководства":

Nulls in Conditions
A condition that evaluates to UNKNOWN acts almost like FALSE. For example, a SELECT statement with a condition in the WHERE clause that evaluates to UNKNOWN returns no rows. However, a condition evaluating to UNKNOWN differs from FALSE in that further operations on an UNKNOWN condition evaluation will evaluate to UNKNOWN. Thus, NOT FALSE evaluates to TRUE, but NOT UNKNOWN evaluates to UNKNOWN.

Table 2-21 shows examples of various evaluations involving nulls in conditions. If the conditions evaluating to UNKNOWN were used in a WHERE clause of a SELECT statement, then no rows would be returned for that query.

Table 2-20 Conditions Containing Nulls
If A is: Condition Evaluates to: 
10 a IS NULL FALSE
 
10 a IS NOT NULL TRUE
 
NULL a IS NULL TRUE
 
NULL a IS NOT NULL FALSE
 
10 a = NULL UNKNOWN
 
10 a != NULL UNKNOWN
 
NULL a = NULL UNKNOWN
 
NULL a != NULL UNKNOWN
 
NULL a = 10 UNKNOWN 

NULL a != 10 UNKNOWN
 
Выводы может сделать любой, кто знает английский хоть немного.
21 янв 05, 13:25    [1264205]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Zaxx
Guest
Softwarer
Осталось выяснить, что Вы слушали, что никогда не слышали. Начиная с Oracle 8, в документации написано примерно следующее: не надо этим пользоваться, потому что весьма вероятно, в следующей версии мы это изменим.


1. Чем не надо пользоваться ???? not null ? или пустыми строками ???
2. Ссылку на документацию в студию !!!!
21 янв 05, 13:33    [1264247]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
Gluk (Kazan)
И где Вы видели в SQL оператор IF ?


SQL - Part 4: Persistent Stored Modules (SQL/PSM)
13.7 <if statement> (страница 105)

Для особо упертых приведу другой пример:

select case when null = null then 'TRUE' else 'FALSE' end
from dual

И тут варианта тоже всего два, однако.

Gluk (Kazan)
P.S. Спасибо за заботу, но смеятся я буду над тем, над чем сочту нужным :)


Да ради бога.
21 янв 05, 13:36    [1264268]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7078
Zaxx

1. Чем не надо пользоваться ???? not null ? или пустыми строками ???
2. Ссылку на документацию в студию !!!!

Держите:

Nulls
If a column in a row has no value, then the column is said to be null, or to contain null. Nulls can appear in columns of any datatype that are not restricted by NOT NULL or PRIMARY KEY integrity constraints. Use a null when the actual value is not known or when a value would not be meaningful.

Do not use null to represent a value of zero, because they are not equivalent. (Oracle 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.) Any arithmetic expression containing a null always evaluates to null. For example, null added to 10 is null. In fact, all operators (except concatenation) return null when given a null operand.
21 янв 05, 13:40    [1264286]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
michael_
Member

Откуда: Москва
Сообщений: 600
NULL конечно же не равен пустой строке. Если кому-то это не нравится, то можно воспользоваться для таких полей свойством not null default ''

А еще в T-SQL есть удобная функция ISNULL.

Пример
isnull('qwerty','') результат 'qwerty'
isnull(null,'') результат null
21 янв 05, 13:42    [1264298]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
michael_
Member

Откуда: Москва
Сообщений: 600
Ай-ай не прав, описочка

Пример
isnull('qwerty','') результат 'qwerty'
isnull(null,'') результат не null, а '' (пустая строка!)
21 янв 05, 13:47    [1264324]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67475
Блог
Zaxx
1. Чем не надо пользоваться ???? not null ? или пустыми строками ???
2. Ссылку на документацию в студию !!!!

Лентяй Вы, молодой человек :)

Ну например: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements5a.htm#59112. Цитирую:

Oracle 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
21 янв 05, 13:49    [1264336]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Еще раз повторю вопрос. Где в стандарте сказано, что пустая строка НЕ ДОЛЖНА интерпретироваться как null ? Не надо про английский и выводы. Это должно быть сказано явно, поскольку Вы ведете речь О НАРУШЕНИИ стандарта в этой части. И не надо говорить про процедурные расширения, они не имеют отношения к стандартам SQL.

2 softwarer

Приведите мне пример нарушением case стандарта
21 янв 05, 13:52    [1264355]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67475
Блог
michael_
А еще в T-SQL есть удобная функция ISNULL.

Насколько я в курсе, тут MSSQL несколько уступает Oracle. В первом, как я слышал, есть стандартные coalesce, case и нестандартная isnull; во втором - стандартные coalesce, case и нестандартные nvl, decode, nvl2.
21 янв 05, 13:53    [1264356]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
michael_
А еще в T-SQL есть удобная функция ISNULL.


А в оракле есть NVL... А в стандарте есть COALESCE... ;-)
21 янв 05, 13:54    [1264362]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
dimitr
Для особо упертых приведу другой пример:

select case when null = null then 'TRUE' else 'FALSE' end
from dual


Не прокатывает. else в данном случае несоблюдение ЛЮБОГО из условий case (их может быть много и проверяются они по порядку), а не нарушение условия.

Как на счет этого ?

select case when null=null then 'True'
                when null<>null then 'False'
         else 'Всеж таки NULL'
from dual

Кстати, case упоминается в каком либо из заявленных Oracle стандартов ?
21 янв 05, 13:56    [1264377]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67475
Блог
Gluk (Kazan)
Приведите мне пример нарушением case стандарта

Я указывал не на нарушение стандарта, а на сведение трехзначной логики к двухзначной. Впрочем.. как я полагаю, с Вашей точки зрения "так и должно быть"?

SQL> select case when '' = '' then 'equal' else 'not equal' end "Check?" from dual ;

Check?
---------
not equal

Тогда давайте используем Вашу логику: покажите в стандарте место, где написано "пустая строка не равна пустой строке". Или потребуем от стандарта содержать таблицу вида "1=1, 2=2, 3=3 и так далее".
21 янв 05, 13:57    [1264383]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
2 softwarer

При всем уважении :) Речь идет не о
НЕУДОБСТВАХ
Oracle при работе с пустой строкой, а о не соблюдении стандарта на SQL. Будьте так любезны ссылочку на пункт стандарта, котроый нарушается.

Я понятно изложил свою позицию ?
21 янв 05, 14:01    [1264405]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Sorry SRC вместо BOLD влепил
21 янв 05, 14:02    [1264411]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67475
Блог
Gluk (Kazan)
Будьте так любезны ссылочку на пункт стандарта, котроый нарушается.

Я понятно изложил свою позицию ?

При всем уважении - у Вас нет оснований требовать от меня занять некую позицию (противоположную Вашей) и отстаивать ее. Посмотрите письмо, на которое я отвечал, и что именно в нем содержалось.
21 янв 05, 14:19    [1264506]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
andy st
Member

Откуда:
Сообщений: 899
Gluk (Kazan)

При всем уважении :) Речь идет не о
НЕУДОБСТВАХ
Oracle при работе с пустой строкой, а о не соблюдении стандарта на SQL. Будьте так любезны ссылочку на пункт стандарта, котроый нарушается.

отвечу за Softwarer-а
sql-92
раздел 6. Scalar expression
подраздел 6.1 <data type>
syntax rules 9

9) Case:
a) If VARYING is not specified in <character string type>, then the length in characters of the
character string is fixed and is the value of <length>.
b) If VARYING is specified in <character string type>, then the length in characters of the
character string is variable, with a minimum length of 0 and a maximum length of the
value of <length>.
этого хватит?
21 янв 05, 14:20    [1264511]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7004
Gluk (Kazan)
Где в стандарте сказано, что пустая строка НЕ ДОЛЖНА интерпретироваться как null ? Не надо про английский и выводы. Это должно быть сказано явно, поскольку Вы ведете речь О НАРУШЕНИИ стандарта в этой части.


Пользуясь вашим приемом, очень хочется в ответ спросить, где в стандарте сказано, что пустая строка ДОЛЖНА интерпретироваться как NULL?

Gluk (Kazan)
И не надо говорить про процедурные расширения, они не имеют отношения к стандартам SQL.


Да ну? Впрочем, я уже убедился, что ваше понимание стандартов SQL весьма отличается от ANSI комитета.
21 янв 05, 14:28    [1264568]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 19 20 21 22 23 [24] 25 26 27 28 .. 31   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить