Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
Можно ли каким-нибудь образом расширить диапазон возможных дат в SQL сервере?
Скажем с 1 января 0 года, до 31 декабря 300 000 000 года?
Либо же пользоваться nvarchar, потом пытаться конвертировать (крайне нежелательно), т. к. это привнесет кучу геморроя с запросами (between и т.д.).
Есть еще одна мысль - хранить дату в трех разных ячейках инт, инт и бигинт, но опять же, куча ненужных проверок (инсерт упдейт) и прочего говнокода при составлении запроса.

Как наиболее правильно решить данную проблему?


Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
20 авг 12, 09:27    [13035109]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
LameUser,

григорианский календарь имеет период 400 лет.
СлабО написать свою обработку дат, находящихся в разных 400-летиях,
а внутри пользоваться стандартными функциями?
20 авг 12, 09:34    [13035136]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
iap
LameUser,

григорианский календарь имеет период 400 лет.
СлабО написать свою обработку дат, находящихся в разных 400-летиях,
а внутри пользоваться стандартными функциями?


Наверное да, т.к. SQL server не основной мой рабочий инструмент :)

Так все-таки, какое будет ваше предложение решения возникшей проблемы?
20 авг 12, 09:37    [13035145]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
Гузы
Guest
LameUser,
В 2008 введены типы date и datetime2 (01/01/0001 - 31/12/9999) - может хватит этого?
20 авг 12, 10:43    [13035406]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
LameUser
Можно ли каким-нибудь образом расширить диапазон возможных дат в SQL сервере?
Скажем с 1 января 0 года, до 31 декабря 300 000 000 года?
Либо же пользоваться nvarchar, потом пытаться конвертировать (крайне нежелательно), т. к. это привнесет кучу геморроя с запросами (between и т.д.).
Есть еще одна мысль - хранить дату в трех разных ячейках инт, инт и бигинт, но опять же, куча ненужных проверок (инсерт упдейт) и прочего говнокода при составлении запроса.

Как наиболее правильно решить данную проблему?


Нулевого года не существовало. Именно по этому начало тысячелетия было в 2001 году, а не в 2000

немного расширить можно:

declare @dt as datetime2

set @dt='00010101'

select @dt

set @dt='99990101'

select @dt
20 авг 12, 10:44    [13035414]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]

Guest
поступать как когда "в старину")) использовать дробное, в целой хранить дату, в дробной время. и соответственно их обрабатывать.
20 авг 12, 10:48    [13035434]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
`ё,
А в числах что хранить, секунды?


В общем видимо придется изобретать велосипед :)
20 авг 12, 11:34    [13035744]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
расширить диапазон
Guest
LameUser,

и много у вас данных за 300 000 000й год?
20 авг 12, 11:44    [13035807]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
расширить диапазон,

Нет, крайне мало, но они есть.
Большинство же 1 год 10 год... (близкие к 0).

Пока еще кстати не думал как хранить даты до Н.Э... (но это на потом оставил)
20 авг 12, 11:46    [13035822]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
LameUser
Пока еще кстати не думал как хранить даты до Н.Э... (но это на потом оставил)

отрицательные значения будет самое то.
20 авг 12, 12:14    [13036011]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]

Guest
LameUser,
если точность нужна до секунд - то секунды, с нужной точностью.
20 авг 12, 12:18    [13036035]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Просто нужно использовать несколько полей, а не одно.

1. [Наша эра] (Anno Domini)
2. [Номер четырёхсотлетия] (или стотысячелетия - как удобнее)
3. [Номер года в четырёхсотлетии].

И написать функции-обёртки для системных функций работы с датами (DATEDIFF, DATEADD, ISDATE и т.п.)
Правда, скалярные UDF будут безбожно тормозить...
20 авг 12, 12:26    [13036090]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
iap
Просто нужно использовать несколько полей, а не одно.

1. [Наша эра] (Anno Domini)
2. [Номер четырёхсотлетия] (или стотысячелетия - как удобнее)
3. [Номер года в четырёхсотлетии].

И написать функции-обёртки для системных функций работы с датами (DATEDIFF, DATEADD, ISDATE и т.п.)
Правда, скалярные UDF будут безбожно тормозить...


а если сузить диапозон допустим с 01.01.01, до 31.12.9999 можно как нибудь включить даты 01.01.0001 в одном поле типа DateTime?
20 авг 12, 13:04    [13036381]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
LameUser
а если сузить диапозон допустим с 01.01.01, до 31.12.9999 можно как нибудь включить даты 01.01.0001 в одном поле типа DateTime?
http://msdn.microsoft.com/en-us/library/bb677335.aspx
20 авг 12, 13:13    [13036460]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
LameUser
iap
Просто нужно использовать несколько полей, а не одно.

1. [Наша эра] (Anno Domini)
2. [Номер четырёхсотлетия] (или стотысячелетия - как удобнее)
3. [Номер года в четырёхсотлетии].

И написать функции-обёртки для системных функций работы с датами (DATEDIFF, DATEADD, ISDATE и т.п.)
Правда, скалярные UDF будут безбожно тормозить...


а если сузить диапозон допустим с 01.01.01, до 31.12.9999 можно как нибудь включить даты 01.01.0001 в одном поле типа DateTime?
Да! Конечно!
DATE (без времени)
DATETIME2
и т.п.
20 авг 12, 13:40    [13036718]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
LameUser
Member

Откуда:
Сообщений: 2028
Спасибо всем отписавшимся, буду пробовать DateTime2
20 авг 12, 13:58    [13036899]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
kaygees
Member

Откуда:
Сообщений: 93
Andrey Sribnyak
Нулевого года не существовало. Именно по этому начало тысячелетия было в 2001 году, а не в 2000


начало нового тысячелетия было в 2001 году не по этой причине.
прошлое тысячелетие заканчивается в 2000 году, поэтому новое начинается в 2001 году.
проверьте сами: если считать от 1 до 10, то десятилетие закончится в 10 году, аналогично и тысячелетие.
22 авг 12, 15:20    [13049913]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kaygees
Andrey Sribnyak
Нулевого года не существовало. Именно по этому начало тысячелетия было в 2001 году, а не в 2000


начало нового тысячелетия было в 2001 году не по этой причине.
прошлое тысячелетие заканчивается в 2000 году, поэтому новое начинается в 2001 году.
проверьте сами: если считать от 1 до 10, то десятилетие закончится в 10 году, аналогично и тысячелетие.
Представьте, что считали бы с 0 (то есть был бы нулевой год).
Тогда Ваше рссуждение неверно, и две тысячи лет истекли бы в 1999 году, а начало второго тысячелетия отмечали бы 1 января 2000-го.

Так что именно "по этой причине"!
22 авг 12, 15:24    [13049948]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Минимальная и Максимальная дата  [new]
kaygees
Member

Откуда:
Сообщений: 93
iap,

есть доля правды :)
23 авг 12, 10:53    [13053586]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить