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

Откуда:
Сообщений: 11
Помогите со скриптом, надо получить "среду" как день недели, независимо который день на данный момент. например если сегодня вторник то надо получить предыдущую среду.
В SQL это выглядит так:

declare @date datetime;
set @date='2013-03-19'
SELECT case when datepart(weekday, getdate() >3 then
DATEADD(DAY, +2, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
else DATEADD(DAY, -5, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

В SSIS Expressions builder не получается,

Заранее спасибо
19 мар 13, 18:42    [14069194]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Ээээ... а почему такой сложный расчет среды???
declare @date datetime='20130319';
select @date, dateadd(d,-DATEDIFF(D,2,@date)%7,@date)
19 мар 13, 19:24    [14069348]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
rustamyan
Member

Откуда:
Сообщений: 11
Cygapb-007,

Мне надо в Expression Builder это впихнуть и получить например 20130313 если скрипт запущен сегодня,
19 мар 13, 19:44    [14069428]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Cygapb-007
Ээээ... а почему такой сложный расчет среды???

Не просто сложный, но и некорректный (выдаёт разные значения при разных настройках set datefirst).
19 мар 13, 19:46    [14069431]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
rustamyan
Member

Откуда:
Сообщений: 11
Гость333,

declare @date datetime;
set @date='2013-03-19'
SELECT case when datepart(weekday, @date >3 then
DATEADD(DAY, +2, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
else DATEADD(DAY, -5, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

возвращает то что надо, но мне это надо внедрить в SSIS Expression Builder..
19 мар 13, 19:52    [14069447]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
Гость333
Member

Откуда:
Сообщений: 3683
rustamyan
Гость333,

declare @date datetime;
set @date='2013-03-19'
SELECT case when datepart(weekday, @date >3 then
DATEADD(DAY, +2, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
else DATEADD(DAY, -5, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

возвращает то что надо

Это вам так только кажется:
set datefirst 4

declare @date datetime;
set @date='2013-03-19'
SELECT case when datepart(weekday, @date) >3 then
DATEADD(DAY, +2, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -5, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end


-----------------------
2013-03-20 00:00:00.000

(1 row(s) affected)

Насчёт того, как это перенести в SSIS, я не знаю, сорри.
19 мар 13, 20:05    [14069493]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
подходит такой вариант?
(DT_DATE) DATEADD("D",-DATEDIFF( "D", (DT_DATE)"2000-01-03", @[User::myDate]) %7 , @[User::myDate])
19 мар 13, 21:59    [14069726]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
rustamyan
Member

Откуда:
Сообщений: 11
Cygapb-007,

спасибо, но этот скрипт возвращает '3/18/2013 2:19:03 PM', а мне надо '20130313'
19 мар 13, 22:21    [14069787]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
rustamyan
Cygapb-007,

спасибо, но этот скрипт возвращает '3/18/2013 2:19:03 PM', а мне надо '20130313'

машинально указал понедельник:) правильная дата - 2000-01-05.
Конвертацию даты в нужный формат придумайте сами
20 мар 13, 00:52    [14070188]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Expression  [new]
rustamyan
Member

Откуда:
Сообщений: 11
Cygapb-007,

спасибо огромное
20 мар 13, 19:35    [14074048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить