DimDate не загружается, если диапазон дат изменен на начало с 01-01-0001

Я решил предыдущую проблему, спасибо. Однако у меня все еще есть проблема с нижеследующим (частью предыдущего). Как я могу преобразовать результат в тип данных DATE, поскольку «0001-01-01» не поддерживается с DATETIME? Я пробовал DATETIME2, но не работал, а StartDate должен быть «0001-01-01». Любая помощь очень приветствуется.

ОБЪЯВИТЬ @CurrentDate DATE = '0001-01-01'

ВЫБЕРИТЕ DATEADD (QQ, DATEDIFF (QQ, 0, @CurrentDate), 0) AS FirstDayOfQuarter, DATEADD (QQ, DATEDIFF (QQ, -1, @CurrentDate), -1) AS LastDayOfQuarter, CONVERT (VARCHAR (10), DATE WEEK, DATEDIFF (WEEK, 0, DATEADD (DAY, (6- DATEPART (DAY, @CurrentDate)), @CurrentDate)), 0), 120) AS FirstMondayOftheMonth


Сообщение об ошибке:

Преобразование типа данных даты в тип данных datetime привело к значению вне допустимого диапазона.


person Rastaw    schedule 06.07.2018    source источник
comment
Пожалуйста, добавьте схему #DimDate таблицы   -  person Ajay Gupta    schedule 06.07.2018
comment
Ваш SELECT действительно работает (sqlfiddle.com/#!18/9eecb/23758 ). Предположительно, у вас есть datetime тип данных в вашей таблице.   -  person Gordon Linoff    schedule 06.07.2018
comment
Если вам действительно нужно хранить незаполненные даты, используйте вместо этого типы, допускающие значение NULL.   -  person jean    schedule 06.07.2018
comment
Чтобы повторить то, что говорит @GordonLinoff, вам нужно переключить столбцы типа datetime на столбцы типа datetime2 (или, возможно, что-то более подходящее). Хотя мне любопытно, что столбец типа datetime делает в измерении даты ...   -  person Clockwork-Muse    schedule 06.07.2018


Ответы (1)


Тип данных Range of Datetime - с 1 января 1753 г. по 31 декабря 9999 г.

В сообщении об ошибке указано, что вы превышаете нижнюю границу или нижний предел.

Если вам нужно сохранить это значение из 0001, используйте вместо этого Varchar.

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

person sree    schedule 06.07.2018
comment
не смешивайте varchar с типами даты, много боли в обслуживании - person jean; 06.07.2018
comment
Спасибо, Шри, я понимаю, что обычно используется 1900, но они хотят 0001. Кроме того, использование varchar не будет работать, поскольку я буду использовать DATDIFF и DATEPART позже внутри логики. - person Rastaw; 06.07.2018
comment
Вот логика, которая не работает, поскольку возвращает результат DATETIME. Любая помощь приветствуется. DECLARE @CurrentDate DATE = '0001-01-01' SELECT DATEADD (QQ, DATEDIFF (QQ, 0, @CurrentDate), 0) AS FirstDayOfQuarter, DATEADD (QQ, DATEDIFF (QQ, -1, @CurrentDate), -1) AS LastDayOfQuarter, CONVERT (VARCHAR (10), DATEADD (WEEK, DATEDIFF (WEEK, 0, DATEADD (DAY, (6-DATEPART (DAY, @CurrentDate)), @CurrentDate)), 0), 120) AS FirstMondayOftheMon - person Rastaw; 10.07.2018