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

Откуда:
Сообщений: 1243
Имею следующий запрос - значение NULL, мы CAST как char - получаем NULL значение.
Однако если к нему применить функцию IS NULL- получаем строку с 50 пробелов.
Как понимать ?

SELECT a
	,CAST(a AS CHAR(50)) a_casted
	,ISNULL(cast(a AS CHAR(50)), '') a_is_nulled
	,len(',' + ISNULL(cast(a AS CHAR(50)), '') + ',') a_is_null
FROM (
	SELECT NULL a
	) t


a a_casted a_is_nulled a_is_null
NULL NULL 52
16 окт 12, 13:39    [13326281]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
ISNULL ( check_expression , replacement_value )

Типы возвращаемых данных
Возвращает тот же тип, что и у аргумента check_expression.


а check_expression у Вас = CHAR(50)
16 окт 12, 13:46    [13326370]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
razliv
Member

Откуда:
Сообщений: 1243
HandKot

Это понятно что возвращает значение такого же типа.
Но empty string это и есть empty string.
Этот char(50) неможет содержать empty string ?
16 окт 12, 13:54    [13326462]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
Glory
Member

Откуда:
Сообщений: 104751
razliv
Но empty string это и есть empty string.

Что такое для вас empty string ? Почему символ пробел в не должен учитываться ?
16 окт 12, 13:59    [13326527]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
CHAR(50) не есть empty string это строка фиксированной длины 50
16 окт 12, 14:02    [13326556]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
razliv,

почему CHAR, а не VARCHAR?
16 окт 12, 14:05    [13326589]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
razliv
Member

Откуда:
Сообщений: 1243
Glory

Пустая строка это и есть пустая строка, то есть не содержащая ничего.
Конечно, на будущее учту что используя тип char(50) - можно получить вместо пустой строки -
забитые 50 пробелов.

Но в принципе давайте будем честны - подавая пустую строку, хочеться получить пустую строку.
16 окт 12, 14:06    [13326594]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
Glory
Member

Откуда:
Сообщений: 104751
razliv
Пустая строка это и есть пустая строка, то есть не содержащая ничего.

Пробелы - это для вас ничего ?
razliv
Конечно, на будущее учту что используя тип char(50) - можно получить вместо пустой строки -
забитые 50 пробелов.

А что в этом поведении сервера противоречит документации ?

razliv
Но в принципе давайте будем честны - подавая пустую строку, хочеться получить пустую строку.

Ваше определение "пустая строка" не совпадает с общепринятым
16 окт 12, 14:08    [13326615]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
пустаю строка
Guest
razliv
Glory

Пустая строка это и есть пустая строка, то есть не содержащая ничего.
Конечно, на будущее учту что используя тип char(50) - можно получить вместо пустой строки -
забитые 50 пробелов.

Но в принципе давайте будем честны - подавая пустую строку, хочеться получить пустую строку.

а если вы попытаетесь "засунуть" пустую строку в тип int, вы тоже будете ожидать получить пустой строку?
16 окт 12, 14:09    [13326625]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
razliv
Но в принципе давайте будем честны - подавая пустую строку, хочеться получить пустую строку.
Надо выбирать правильный тип данных.
Это принцип должен быть такой
16 окт 12, 14:11    [13326647]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
razliv
Пустая строка это и есть пустая строка, то есть не содержащая ничего.
Ничего себе, массив из 50 байов с числом 32 - это ничего :-)

Пустая строка - это строка с нулевой длинной.
16 окт 12, 14:13    [13326676]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
razliv
Member

Откуда:
Сообщений: 1243
HandKot

Вот теперь я понял, ибо в Оракуле - хоть char, хоть varchar - empty string
и есть empty string:)

Вот на таких мелочах программисты Оракла и паляться ;)

автор
Урок русского языка в грузинской школе.Преподаватель-грузин,вещает: -Дети,русский язык-странный язык.Не пытайтесь его понять.Просто запомните:слово КОН пишется с мягким знаком,А … КОН-пишеться с мягким знаком,а ТАРЕЛЬКА-без!!!
16 окт 12, 14:16    [13326698]     Ответить | Цитировать Сообщить модератору
 Re: Обьясните такое поведение функции ISNULL  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
razliv
HandKot

Вот теперь я понял, ибо в Оракуле - хоть char, хоть varchar - empty string
и есть empty string:)

Вот на таких мелочах программисты Оракла и паляться ;)

автор
Урок русского языка в грузинской школе.Преподаватель-грузин,вещает: -Дети,русский язык-странный язык.Не пытайтесь его понять.Просто запомните:слово КОН пишется с мягким знаком,А … КОН-пишеться с мягким знаком,а ТАРЕЛЬКА-без!!!


я конечно не спец в оракл, но кажется Вы ошибаетесь

declare 
 s char(50) := '';
begin
     dbms_output.put_line('!' || s || '!');
end;

а вот и результат
!                                                  !


возможно Вы путаете с поведением операторов, которое может многое объяснить
вот пример

SELECT a
	,CAST(a AS CHAR(50)) a_casted
	,ISNULL(cast(a AS CHAR(50)), '') a_is_nulled
	,len(',' + ISNULL(cast(a AS CHAR(50)), '') + ',') a_is_null
	,COALESCE(cast(a AS CHAR(50)), '') a_is_nulled
	,len(',' + COALESCE(cast(a AS CHAR(50)), '') + ',') a_is_null
FROM (
	SELECT NULL a
	) t
16 окт 12, 14:26    [13326807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить