Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск наименьшей даты...  [new]
RussianForce
Member

Откуда:
Сообщений: 207
Здравствуйте!

Есть табличка:

date1				date2	date3	date4
2009-11-12 00:00:00.000	NULL	NULL	2025-06-22 00:00:00.000


Как из этих четырех дат найти наименьшую?
15 июн 09, 13:07    [7299757]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
1
SELECT CASE WHEN ... THEN ... WHEN ... THEN ... END [Date] FROM [Таблица]

2
SELECT (SELECT MIN(D) FROM (SELECT date1 UNION ALL SELECT date1 UNION ALL SELECT date1 UNION ALL SELECT date1)T(D)) [Date]
FROM [Таблица]
15 июн 09, 13:13    [7299802]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RussianForce
Здравствуйте!

Есть табличка:

date1				date2	date3	date4
2009-11-12 00:00:00.000	NULL	NULL	2025-06-22 00:00:00.000


Как из этих четырех дат найти наименьшую?
Вообще-то, есть гарантия, что NULL меньше любого значения не-NULL.
Поэтому в данном случае минимальная дата - NULL
15 июн 09, 13:15    [7299815]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
RussianForce
Member

Откуда:
Сообщений: 207
iap
RussianForce
Здравствуйте!

Есть табличка:

date1				date2	date3	date4
2009-11-12 00:00:00.000	NULL	NULL	2025-06-22 00:00:00.000


Как из этих четырех дат найти наименьшую?
Вообще-то, есть гарантия, что NULL меньше любого значения не-NULL.
Поэтому в данном случае минимальная дата - NULL



Да?
А я тут запустил:
select case when null < convert(datetime, '2009-01-01')  then 1 else 0 end
И выдало 0! Ставлю знак "больше" - тоже 0! Так что гарантии нету! :(
15 июн 09, 13:18    [7299839]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
Glory
Member

Откуда:
Сообщений: 104760
RussianForce
iap
RussianForce
Здравствуйте!

Есть табличка:

date1				date2	date3	date4
2009-11-12 00:00:00.000	NULL	NULL	2025-06-22 00:00:00.000


Как из этих четырех дат найти наименьшую?
Вообще-то, есть гарантия, что NULL меньше любого значения не-NULL.
Поэтому в данном случае минимальная дата - NULL



Да?
А я тут запустил:
select case when null < convert(datetime, '2009-01-01')  then 1 else 0 end
И выдало 0! Ставлю знак "больше" - тоже 0! Так что гарантии нету! :(

Если так сравнивать с null-ом, то конечно никакой гарантии не будет
15 июн 09, 13:19    [7299852]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
для сравнения с null надо использовать IS NULL , IS NOT NULL, а не ту херню что вы написали.
15 июн 09, 13:20    [7299860]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
RussianForce
Member

Откуда:
Сообщений: 207
А как правильно сравнить с null?
15 июн 09, 13:20    [7299861]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
Glory
Member

Откуда:
Сообщений: 104760
RussianForce
А как правильно сравнить с null?

Для начала разобраться с троичной логикой и понять, что null - это неопределенное значение
И результат сравнение неопределенного значения с определенным даст неопределенное значение.
15 июн 09, 13:24    [7299894]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RussianForce
iap
RussianForce
Здравствуйте!

Есть табличка:

date1				date2	date3	date4
2009-11-12 00:00:00.000	NULL	NULL	2025-06-22 00:00:00.000


Как из этих четырех дат найти наименьшую?
Вообще-то, есть гарантия, что NULL меньше любого значения не-NULL.
Поэтому в данном случае минимальная дата - NULL



Да?
А я тут запустил:
select case when null < convert(datetime, '2009-01-01')  then 1 else 0 end
И выдало 0! Ставлю знак "больше" - тоже 0! Так что гарантии нету! :(
ЛЮБОЕ сравнение с NULL, кроме операторов IS NULL и IS NOT NULL приведёт к неопределённому значению (UNDEFINED),
которое при проверке условия обычно трактуется как "ЛОЖЬ"

Когда я говорил о минимуме в применении к NULL, то имел в виду функции MIN, MAX и фразу ORDER BY в SELECTе
15 июн 09, 13:24    [7299896]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
bot67
Member

Откуда: Смоленск
Сообщений: 303
Ken@t
для сравнения с null надо использовать IS NULL , IS NOT NULL, а не ту херню что вы написали.

А "IS NOT NULL" это больше NULL или меньше NULL ?
15 июн 09, 13:25    [7299912]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
bot67
Ken@t
для сравнения с null надо использовать IS NULL , IS NOT NULL, а не ту херню что вы написали.

А "IS NOT NULL" это больше NULL или меньше NULL ?
Считайте, что больше.
Что в этом смешного?
15 июн 09, 13:30    [7299946]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iljy
Guest
iap

Когда я говорил о минимуме в применении к NULL, то имел в виду функции MIN, MAX и фразу ORDER BY в SELECTе


http://msdn.microsoft.com/ru-ru/library/ms179916(SQL.90).aspx

Значения NULL функцией MIN не учитываются.
15 июн 09, 13:31    [7299947]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iljy
Guest
bot67,

вы понимаете, что такое троичная логика? а что такое неупорядоченные множества знаете?
15 июн 09, 13:32    [7299957]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
bot67
Ken@t
для сравнения с null надо использовать IS NULL , IS NOT NULL, а не ту херню что вы написали.

А "IS NOT NULL" это больше NULL или меньше NULL ?

это есть или нет,а в сравнении больше чем два действа. Fuzzy Logic посмотрите для кругозора.
15 июн 09, 13:32    [7299958]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iljy
iap

Когда я говорил о минимуме в применении к NULL, то имел в виду функции MIN, MAX и фразу ORDER BY в SELECTе


http://msdn.microsoft.com/ru-ru/library/ms179916(SQL.90).aspx

Значения NULL функцией MIN не учитываются.
Да. Действительно. Извините.

Зато про ORDER BY я не наврал.
15 июн 09, 13:36    [7299989]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
bot67
Member

Откуда: Смоленск
Сообщений: 303
iljy,

Просто стоит реальная задача сравнить ДАТЫ.
NULL - это не дата. т.е его надо просто отбросить.
причем тут троичные и Fuzzy логики?
15 июн 09, 13:40    [7300019]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
iljy
Guest
bot67,

при том, что этой логикой оперирует скуль, и если вы не понимаете, что и как он считает - вам суждено удивляться.
15 июн 09, 13:43    [7300040]     Ответить | Цитировать Сообщить модератору
 Re: Поиск наименьшей даты...  [new]
bot67
Member

Откуда: Смоленск
Сообщений: 303
iljy
bot67,

при том, что этой логикой оперирует скуль, и если вы не понимаете, что и как он считает - вам суждено удивляться.

Всё.. победили.. пойду книжки читать...
15 июн 09, 13:50    [7300090]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить