хранить только дату, а не время в поле datetime - PullRequest
0 голосов
/ 25 октября 2011

Это тривиальный вопрос, я добавил поле

Alter table MyTbl add datecreated smalldatetime default CONVERT(varchar(10),GetDate(),101)

Когда я проверяю новое поле, оно показывает не только дату, но и время. Я проверяю определение таблицы (щелкните правой кнопкой мыши по таблице -> Изменить в SSMS), и оно говорит, что значением по умолчанию является GETDATE () [по умолчанию оно отменяет преобразование (...)]. Почему это так? Есть ли способ задать дату по умолчанию только для поля даты и времени, а не для времени.

Я закончил тем, что оставил поле времени как есть, потому что лучше увидеть, что происходит в таблице esp на начальном этапе тестирования.

Ответы [ 3 ]

1 голос
/ 25 октября 2011

Только потому, что вы конвертируете дату / время, возвращаемое из getdate() в varchar(10), существует другое неявное приведение от varchar(10) до datetime, так как это тип данных для вашего поля.

Вам нужно иметь тип поля datecreated a varchar(10).

Ваше заявление alter table должно быть:

Alter table MyTbl add datecreated varchar(10) default CONVERT(varchar(10),GetDate(),101)
1 голос
/ 25 октября 2011

Я только что попробовал ваше ALTER утверждение, и оно работает, как вы ожидаете;когда я вхожу в строку без включения datecreated, она устанавливает значение даты со временем 00:00:00.

Тот факт, что вы проверили определение таблицы и говорит, что по умолчанию используется GETDATE() отведениймне поверить, что колонка уже существует, и ваш ALTER не удалось.

1 голос
/ 25 октября 2011

это сбросит временной интервал на ноль

DateAdd(day, DateDiff(day, 0, PayDate), 0) 
...