Как установить значение по умолчанию или привязку для даты / времени к 01.01.00 00:00 в SQL Server 2005? - PullRequest
0 голосов
/ 20 июня 2010

Я пытаюсь ввести значение по умолчанию "1/1/0001 12:00:00 AM", но сначала это не позволяет мне.

Поэтому я попытался установить "1/1/ 0001 "но когда я проверяю это.Он изменяется на (((1) / (1)) / (1)), и когда я пробую значение по умолчанию, он возвращает «01.02.1900, 12:00:00». Я не уверен, почему.

Ответы [ 3 ]

2 голосов
/ 20 июня 2010

Попробуйте это

CREATE TABLE MyTable (Id INT, aDate DATETIME NOT NULL DEFAULT('1753-01-01'))

Или, если вы хотите стать "модным", вы можете попробовать это:

CREATE DEFAULT [dbo].[DefaultDate] AS '1753-01-01'
GO

CREATE TYPE [dbo].[MyDate] FROM [datetime] NOT NULL
GO

EXEC sys.sp_bindefault 
  @defname=N'[dbo].[DefaultDate]', 
  @objname=N'[dbo].[MyDate]' 
GO

CREATE TABLE MyTable (Id INT, aDate [MyDate] NOT NULL)
GO

INSERT INTO MyTable (ID) SELECT 1
SELECT * FROM MyTable 

[EDIT] Как заметил Мартин Смит, sp_bindefault будет удален в следующей версии ( см. ). Итак, используйте первое решение, чтобы избавиться от головной боли при будущих обновлениях.

2 голосов
/ 20 июня 2010

Диапазон значений datetime в SQL Server - с 1 января 1753 года по 31 декабря 9999 года. Если вы хотите использовать значение 1/1/0001, вы должны использовать datetime2 в SQL Server 2008.

1 голос
/ 21 июня 2010

Во-первых, DateTime типы данных могут хранить только минимальную дату «1753-01-01».Для SmallDateTime минимальная дата - «1900-01-01».Не случайно они выбрали это значение.Сам календарь изменился в 1752 году, и поэтому попытка сравнить количество дней от «1701-01-01» до настоящего времени проблематична с использованием стандартной математики даты.

Однако в SQL Server 2008 появился новый DateTime2 или Date, любой из которых может хранить значение 0001-01-01, но было бы ошибкой делать это по причине, которую я только что упомянул.

В-третьих, попытка использовать произвольную дату для представления отсутствия значения даты является ошибкой ИМО.Это то, что я называю «магическим значением», подходом к избеганию нулей.IMO, это значительно усложняет вызывающий код, так как теперь вызывающий код должен знать и проверять магическое значение вместо нуля, чтобы знать, отображать ли пробел.Вместо этого вы должны вернуть значения DateTime (DateTime?), которые могут иметь значение NULL, из вашего кода LINQ и передать этот ноль до уровня представления, чтобы код представления мог обрабатывать отсутствующие значения. Или

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...