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

Откуда:
Сообщений: 26
Здравствуйте, уважаемые программисты!
Скажите: как лучше и проще сформировать дату по дню, месяцу и году?
Типа как в Delphi
function EncodeDate(Year, Month, Day: Word): TDateTime;
25 мар 04, 11:39    [596315]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
FAQ
25 мар 04, 11:41    [596323]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Это всё понятно.
Но, например, если надо получить первое число месяца для заданной даты, придётся месяц и год выделить из даты, затем преобразовывать их в строки, да ещё анализировать необходимость лидирующих нулей в месяце.
25 мар 04, 12:00    [596399]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
datepart()
25 мар 04, 12:02    [596409]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Наверно я плохо объяснил.
Имею
@d1 datetime
@d2 datetime
хочу получить дату, в которой день от @d1, а месяц и год от @d2.
25 мар 04, 12:11    [596443]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Bear_
Member

Откуда: Киев
Сообщений: 152
cast(datepart(@d2,yyyy)+datepart(@d2,mm)+datepart(@d1,dd) as datetime)
25 мар 04, 12:15    [596459]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Bear_
Member

Откуда: Киев
Сообщений: 152
cast(

cast(datepart(@d2,yyyy) as char(4))
+cast(datepart(@d2,mm) as char(4))
+cast(datepart(@d1,dd) as char(2)) as datetime)
25 мар 04, 12:18    [596468]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Bear_
Member

Откуда: Киев
Сообщений: 152
дубль 3 :)
cast(

cast(datepart(@d2,yyyy) as char(4))
+cast(datepart(@d2,mm) as char(2))
+cast(datepart(@d1,dd) as char(2)) as datetime)
25 мар 04, 12:21    [596479]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Спасибо.
только, наверно,
cast(

cast(datepart(@d2,yyyy) as char(4))
+cast(datepart(@d2,mm) as char(2))
+cast(datepart(@d1,dd) as char(2)) as datetime)
25 мар 04, 12:21    [596481]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Bear_
Member

Откуда: Киев
Сообщений: 152
да уж наверное ;)
25 мар 04, 12:25    [596500]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
declare @d1 datetime, @d2 datetime

set @d1='20040515'
set @d2='20041002'
select cast(
cast(datepart(yyyy, @d2) as char(4))
+cast(datepart(mm,@d1) as char(2))
+cast(datepart(dd,@d2) as char(2)) as datetime)

Не работает
25 мар 04, 12:26    [596502]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Server: Msg 241, Level 16, State 1, Line 4
Syntax error converting datetime from character string.

Я сейчас, чтобы не отслеживать лидирующие нули, ставлю точки между годом, месяцем и днём. Может ли это где-то вылезти боком?
25 мар 04, 12:33    [596526]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Glory
Member

Откуда:
Сообщений: 104760
хочу получить дату, в которой день от @d1, а месяц и год от @d2.
А не получится у вас 31 февраля ?
25 мар 04, 12:36    [596534]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Bear_
Member

Откуда: Киев
Сообщений: 152
я думаю нет
25 мар 04, 12:36    [596535]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
я так делаю

declare @date datetime, @bdate datetime, @edate datetime
select @date = getdate()
select @bdate = dateadd(mm, datediff(mm, 0, @date), 0), @edate = dateadd(mm, datediff(mm, 0, @date)+1, 0)
select @bdate, @edate
select @bdate = dateadd(qq, datediff(qq, 0, @date), 0), @edate = dateadd(qq, datediff(qq, 0, @date)+1, 0)
select @bdate, @edate
select @bdate = dateadd(yy, datediff(yy, 0, @date), 0), @edate = dateadd(yy, datediff(yy, 0, @date)+1, 0)
select @bdate, @edate

если прямо очень нужда строго конец даты какой-либо (не начало следующего)...
declare @date datetime, @bdate datetime, @edate datetime

select @date = getdate()
select @bdate = dateadd(mm, datediff(mm, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(mm, datediff(mm, 0, @date)+1, 0))
select @bdate, @edate
select @bdate = dateadd(qq, datediff(qq, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(qq, datediff(qq, 0, @date)+1, 0))
select @bdate, @edate
select @bdate = dateadd(yy, datediff(yy, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(yy, datediff(yy, 0, @date)+1, 0))
select @bdate, @edate



для спящего время бодрствования равносильно сну
25 мар 04, 12:38    [596543]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
я так делаю

declare @date datetime, @bdate datetime, @edate datetime
select @date = getdate()
select @bdate = dateadd(mm, datediff(mm, 0, @date), 0), @edate = dateadd(mm, datediff(mm, 0, @date)+1, 0)
select @bdate, @edate
select @bdate = dateadd(qq, datediff(qq, 0, @date), 0), @edate = dateadd(qq, datediff(qq, 0, @date)+1, 0)
select @bdate, @edate
select @bdate = dateadd(yy, datediff(yy, 0, @date), 0), @edate = dateadd(yy, datediff(yy, 0, @date)+1, 0)
select @bdate, @edate

если прямо очень нужда строго конец даты какой-либо (не начало следующего)...
declare @date datetime, @bdate datetime, @edate datetime

select @date = getdate()
select @bdate = dateadd(mm, datediff(mm, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(mm, datediff(mm, 0, @date)+1, 0))
select @bdate, @edate
select @bdate = dateadd(qq, datediff(qq, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(qq, datediff(qq, 0, @date)+1, 0))
select @bdate, @edate
select @bdate = dateadd(yy, datediff(yy, 0, @date), 0), @edate = dateadd(ss, -1, dateadd(yy, datediff(yy, 0, @date)+1, 0))
select @bdate, @edate



для спящего время бодрствования равносильно сну
25 мар 04, 12:39    [596546]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
2Glory
Это не конкретный пример, только для постановки вопроса.
Всё-таки кто как формирует даты? Неужели никто из @d int, @m int, @y int не генерировал datetime?
25 мар 04, 12:42    [596557]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
cast(cast(@y*10000+@m*100+@d as char(8)) as datetime)
25 мар 04, 12:45    [596567]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Ой, спасибо!
Я чувствовал, что ответ где-то в этом направлении.
25 мар 04, 12:50    [596590]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
AlexanderVS
Member

Откуда: Krasnoyarsk
Сообщений: 433
Вот так не пойдет?
declare @d int,@m int,@y int,@dt datetime

set @d=10
set @m=5
set @y=2000
set @dt=convert(datetime,convert(char(2),@m)+'.'+convert(char(2),@d)+'.'+convert(char(4),@y))
select @dt
25 мар 04, 12:54    [596603]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
Вячеслав Ч.
Member

Откуда:
Сообщений: 26
Наверно, в общем случае, на разных серверах с разной настройкой, этот вариант не сработает. Пусть меня поправят, если я не прав.
Проблемы могут быть с точкой и порядком m,d,y
25 мар 04, 12:58    [596624]     Ответить | Цитировать Сообщить модератору
 Re: Кто как формирует дату?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Пойдет, пойдет... Только если вместо точек поставить слэшь (/) и для страховки явно указать стиль 101.
25 мар 04, 13:00    [596632]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить