Как остановить вставку формата даты по умолчанию 1900-01-01 в SQL Server, когда пользовательский ввод пуст - PullRequest
0 голосов
/ 18 мая 2019

У меня есть поле ввода в моем приложении, которое принимает дату через указатель даты. Иногда пользователи не выбирают какую-либо дату и могут оставить пустое (требование клиента), так как это не обязательное поле.

Один раз после пустой отправки данных, которые хранятся в базе данных SQL Server 2008, будет 1900-01-01. Вместо этого мне нужно, чтобы данные были сохранены как «NULL» или «пусто» или «0000-00-00», но не в каком-либо другом допустимом формате даты.

Если request.getparameter() пусто, я попытался вставить «0000-00-00». Но это останавливает вставку.

Моя цель - вставить либо NULL, либо - - или 0000-00-00, когда пользователь отправляет пустое поле. Вместо «1900-01-01».

1 Ответ

2 голосов
/ 18 мая 2019

К сожалению, SQL Server интерпретирует «пустую» (то есть пустую строку) как дату со значением 1900-01-01. Поэтому, когда вы пишете:

insert into t (datecol)
    values ('');

Это в основном скомпилировано в:

insert into t (datecol)
    values ('1900-01-01');

Что ты можешь сделать? Наиболее очевидным является не вставлять пустые значения. Вы хотите вставить NULL, поэтому вставьте NULL. В этом случае вы можете использовать NULLIF():

insert into t (datecol)
    values (nullif('', ''));

Это превратит вход в соответствующее значение.

Второй вариант - отклонить такие значения с помощью проверочного ограничения:

alter table t add constraint chk_t_datecol
    check (date >= '1950-01-01');

То есть даты находятся в допустимом диапазоне.

Третий вариант - добавить триггер для преобразования '1900-01-01' в значение NULL при отображении на входе.

И четвертый вариант - разрешить такие значения, но использовать вычисляемый столбец для справочных целей:

alter table t add datecol_good as ( nullif(datecol, '1900-01-01'));

Все эти опции предполагают, что '1900-01-01' не является действительной датой, которую вы хотели бы указать в своих данных.

...