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

Откуда:
Сообщений: 7
Всем привет!

Господа, пожалуйста, помогите, подскажите.
В общем нужно создать поле сезонности со значениями(winter, spring, summer, autumn) с привязкой по дате, т.е допустим в таблице есть поле TRANSDATE к примеру с датой 2016-10-15 00:00:00.000, то значение сезонности при этом будет соответственно 'Autumn'.

Вопрос заключается в том, каким образом это лучше реализовать.
Понятное дело, что это нужно делать через выражение case, но как именно разграничить даты на каждое условие? Можно ли это сделать через функцию datediff, предварительно задав 4 переменные?

Заранее большое спасибо.
13 мар 19, 18:01    [21831632]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
court
Member

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

select case 
			-- ...
			when month('2016-10-15 00:00:00.000') in (10,11,12) then 'Autumn'
			-- ...
		end

?
13 мар 19, 18:07    [21831642]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
court
Member

Откуда:
Сообщений: 1626
fix
court
plorkie,

select case 
			-- ...
			when month('2016-10-15 00:00:00.000') in (9,10,11) then 'Autumn'
			-- ...
		end


?

:)
13 мар 19, 18:07    [21831643]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6025
plorkie,

прям в примерах ms

SELECT  CHOOSE(MONTH(@TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter')
13 мар 19, 18:11    [21831646]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 31131
Блог
plorkie,

Нужно добавить в таблицу календаря это ваше поле.
13 мар 19, 20:42    [21831815]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
plorkie
Member

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

Спасибо! Никогда не использовал функцию Choose, правильно ли я понимаю, что @TRANSDATE нужно задавать через Declare?
То есть будет
DECLARE @TRANSDATE DATETIME;
SET @TRANSDATE = (select TRANSDATE from tablename);
?
13 мар 19, 20:57    [21831820]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
plorkie
Member

Откуда:
Сообщений: 7
Критик,

Не совсем понял, поясни пожалуйста. Это поле нужно добавить в таблицу с чеками, где единственное поле с датами, это TRANSDATE(дата проводки).
13 мар 19, 21:02    [21831826]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6025
plorkie,

Если надо в таблицу, то просто
ALTER TABLE ADD Season AS CHOOSE(MONTH(TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter')
14 мар 19, 10:03    [21832087]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
iap
Member

Откуда: Москва
Сообщений: 46635
TaPaK
plorkie,

Если надо в таблицу, то просто
ALTER TABLE ADD Season AS CHOOSE(MONTH(TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter')
Чем это лучше простого доброго старого стандартного CASE?
14 мар 19, 10:29    [21832118]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6025
iap
TaPaK
plorkie,

Если надо в таблицу, то просто
ALTER TABLE ADD Season AS CHOOSE(MONTH(TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter')
Чем это лучше простого доброго старого стандартного CASE?

ничем, писать меньше, наверное
14 мар 19, 10:30    [21832121]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
plorkie
Member

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

Забыл сказать, есть нюанс, что вся конструкция состоит в процедуре, т. е часть

  SELECT C.CHECK_PK CHECK_ID
            ,C.TRANSACTION_DT TRANSDATE
            ,C.LOCATION_FK
            ,CT.CATEGORY
            ,CT.SUBCATEGORY
            ,CT.PRICE_POSITIONING
            ,0 IS_COUR_DELIVERY
            ,1 IS_RETAIL_FLAG
            ,CT.SUM_QTY
            ,CT.SUM_PRICE
            ,CT.MAX_PRICE
			,CHOOSE(MONTH(TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter') 		     
			AS SEASON
			INTO table
14 мар 19, 10:51    [21832161]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6025
plorkie,

Вы и пальцы за меня загибать будете?
14 мар 19, 10:53    [21832165]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
plorkie
Member

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

В общем все получилось, спасибо большое!)
14 мар 19, 15:05    [21832673]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
aleks222
Member

Откуда:
Сообщений: 495
plorkie
TaPaK,

Забыл сказать, есть нюанс, что вся конструкция состоит в процедуре, т. е часть

  SELECT C.CHECK_PK CHECK_ID
            ,C.TRANSACTION_DT TRANSDATE
            ,C.LOCATION_FK
            ,CT.CATEGORY
            ,CT.SUBCATEGORY
            ,CT.PRICE_POSITIONING
            ,0 IS_COUR_DELIVERY
            ,1 IS_RETAIL_FLAG
            ,CT.SUM_QTY
            ,CT.SUM_PRICE
            ,CT.MAX_PRICE
			,CHOOSE(MONTH(TRANSDATE),'Winter','Winter', 'Spring','Spring','Spring','Summer','Summer',   
                                                  'Summer','Autumn','Autumn','Autumn','Winter') 		     
			AS SEASON
			INTO table


Халтура. Таких говнокодеров надо душить ишо в колыбельке.
Завтра глобальное потепление - список сезонов поменялся - переписываем все нахер.

Табличка-справочник - вот истинный дао.
15 мар 19, 05:56    [21833203]     Ответить | Цитировать Сообщить модератору
 Re: Создание поля сезонности  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3040
aleks222
Завтра глобальное потепление - список сезонов поменялся - переписываем все нахер.
Даже не в этом дело. Есть и более реалистичные причины вывести это в таблицу, как-то:

  • вывод специфичен для северного полушария;
  • локализовать литералы на произвольный язык гораздо геморнее, если вообще возможно;
  • через месяц придет другой менеджер и захочет видеть этот столбец КАПСом - вместо обновления одной таблицы придется лопатить весь код, где такая конструкция встречается.

    Первое, что пришло в голову, наверняка есть и еще причины так не делать.
  • 15 мар 19, 06:25    [21833208]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить