Как получить время эпохи в SQL Server? - PullRequest
7 голосов
/ 01 апреля 2012

Сценарий таков: выберите максимальную дату из некоторой таблицы, когда у целевой таблицы нет данных, поэтому максимальная дата равна нулю.когда дата равна нулю, я хочу получить самую раннюю дату системы, поэтому время эпохи кажется идеальным.

Я искал несколько способов, включая функции DATEADD, но это кажется не элегантным.

Ответы [ 3 ]

9 голосов
/ 01 апреля 2012

Если я правильно понимаю ваш вопрос, в SQL Server эпоха задается как cast(0 as datetime):

select Max(ISNULL(MyDateCol, cast(0 as datetime)))
from someTable
group by SomeCol
5 голосов
/ 11 мая 2016

Самая ранняя дата, которая может быть сохранена в поле даты и времени SQL, зависит от типа данных, который вы используете:

datetime:
    1753-01-01 through 9999-12-31

smalldatetime:
    1900-01-01 through 2079-06-06

date, datetime2 and datetimeoffset:
    0001-01-01 through 9999-12-31

Для более точных деталей см. https://msdn.microsoft.com/en-GB/library/ms186724.aspx#DateandTimeDataTypes

эпоха полезна, если вы конвертируете числа в даты, но не имеет значения, если вы храните даты как даты.

Если вы не хотите правильно обращаться с нулями, простой ответ - выбрать дату, которая, как вы знаете, будет раньше ваших данных, и жестко закодировать ее в своем запросе. cast('1900-01-01' as datetime) будет работать в большинстве случаев.

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

0 голосов
/ 29 июня 2012

Если вы определите эпоху как 1 января 1970 года: лучше: сохранить ее в переменной

DECLARE @epoch DATETIME
SET     @epoch = CONVERT( DATETIME, '01 JAN 1970', 106 )

select
 DATEPART(YEAR,  DATEADD(day, 180, @epoch)) as year,
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...