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

Откуда: Нижний Новгород
Сообщений: 67
Есть база, куда скриптом добавляются и при добавлении '' в базу, MsSQLпроводит неявное преобразование и вставляет 1900-01-01 в значение, в итоге пользователь видит в своих документах не отсутствие даты, а 1900-01-01, что мягко говоря не одно и тоже.

Как заставить СУБД не выполнять неявное преобразование при добавлении и обновлении?

Хочется чтобы клиент получал чистые данные, а не левые данные.

В поиске в основном советуют что то типа
UPDATE <table>
SET <column name> = NULL
WHERE <column name> = '1900-01-01' 
13 апр 12, 14:48    [12412371]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
iljy
Member

Откуда:
Сообщений: 8711
Tmin10,

СУБД не проводит никаких самостоятельных преобразований. Смотрите, каким именно образом вставляются данные, нет ли триггеров, значений по умолчанию и т.п. Короче профайлер вам в руки.
13 апр 12, 14:51    [12412395]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Tmin10,

Исправить код в клиентском приложении
13 апр 12, 14:51    [12412407]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Tmin10, сравните:
SELECT cast(0 as DATETIME), cast('' as DATETIME), cast(NULL as DATETIME), cast(NULLIF('','') as DATETIME)
13 апр 12, 14:52    [12412415]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> что мягко говоря не одно и тоже.

так в ms sql пустая строка и null - это тоже не одно и то же.
хотите null - так и вставляйте null.

Posted via ActualForum NNTP Server 1.5

13 апр 12, 14:54    [12412436]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
daw
> что мягко говоря не одно и тоже.

так в ms sql пустая строка и null - это тоже не одно и то же.
хотите null - так и вставляйте null.

+1

p.s. А в оракле кстати пустая строка эквивалентна NULL. Так что всяко бывает в жизни.
13 апр 12, 14:56    [12412458]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Tmin10
Member

Откуда: Нижний Новгород
Сообщений: 67
daw
хотите null - так и вставляйте null.


Я вставляю '' и хочу получить ''


kDnZP, вроде понял Вас, сравниваю входящее значение с пустым местом и если равны вставляется NULL, спасибо, попробую вставить в систему
13 апр 12, 14:58    [12412488]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
Tmin10
daw
хотите null - так и вставляйте null.


Я вставляю '' и хочу получить ''

Это же не строка!!! Это же ДАТА!! она вообще как число хранится
13 апр 12, 15:01    [12412530]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Tmin10
Я вставляю '' и хочу получить ''
Дата хранится как 2 числа.
13 апр 12, 15:04    [12412565]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Я вставляю '' и хочу получить ''

строка и datetime - это тоже сильно не одно и то же.
и '' datetime хранить не может так же, как и 'asdfasdfasdf', например.
и с какой это стати переданное не-null значение вдруг
преобразуется в null. гораздо логичней уж к некой "нулевой" дате приводить.

Posted via ActualForum NNTP Server 1.5

13 апр 12, 15:06    [12412576]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Tmin10
Member

Откуда: Нижний Новгород
Сообщений: 67
Ну вроде как логично, если передать непонятно что, то в базу добавится НИЧТО, а не некое начало временных координат, ИМХО.
13 апр 12, 15:07    [12412591]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
:P
Guest
короче, зря сервер не ругается при вставке, что тип не тот.
надо было бы отказаться вставлять, и все.
а кто что-то делает, тот всегда и виноват, надо же, не так преобразовал :P
13 апр 12, 15:10    [12412612]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Ну вроде как логично, если передать непонятно что, то в базу
> добавится НИЧТО, а не некое начало временных координат, ИМХО.

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


Posted via ActualForum NNTP Server 1.5

13 апр 12, 15:10    [12412615]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
Tmin10
Ну вроде как логично

не всем, не всегда, не везде
13 апр 12, 15:10    [12412617]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
iljy
Member

Откуда:
Сообщений: 8711
Tmin10
Ну вроде как логично, если передать непонятно что, то в базу добавится НИЧТО, а не некое начало временных координат, ИМХО.

Если передать непонятно что, то в базу ничего не вставится и сервер выдаст ошибку. А пустая строка вполне себе адекватно представляет нулевую дату, так же как и целое число 0.
13 апр 12, 15:25    [12412767]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Tmin10
Member

Откуда: Нижний Новгород
Сообщений: 67
Так, NULLIF('','') конечно выдаёт NULL при совпадении, а как сделать чтобы добавлялось значение, если не совпадает с пустой строкой?
13 апр 12, 15:29    [12412795]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Tmin10
Так, NULLIF('','') конечно выдаёт NULL при совпадении, а как сделать чтобы добавлялось значение, если не совпадает с пустой строкой?
NULLIF(значение,'')
13 апр 12, 15:31    [12412812]     Ответить | Цитировать Сообщить модератору
 Re: 1900-01-01 вместо NULL  [new]
Tmin10
Member

Откуда: Нижний Новгород
Сообщений: 67
alexeyvg,

Извиняюсь, читал же документацию, просто воткнул вторым аргументом вот и удивился нулю...
13 апр 12, 15:33    [12412833]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить