Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2014, 17:13   #1
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию Проверка даты на время года(SQL)

Имеется переменная формата date типа ‘ГГГГ-ММ-ДД’. Для этой даты нужно сделать проверку, каким временем года она является, зима или лето и т.д. Как это можно сделать? С помощью if? И нужно ли разделять для этого дату на отдельные переменные для года, месяца и дня?
Nekit9401 вне форума Ответить с цитированием
Старый 25.05.2014, 17:54   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Имеется переменная формата date типа ‘ГГГГ-ММ-ДД’
Что это за тип такой ‘ГГГГ-ММ-ДД’? Да и формат date что-то новенькое. Переменная или поле? Переменная не очень вяжется с SQL. Если SQL, то какой диалект? Обычно обработка даты-времени различна для разных СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.05.2014 в 17:57.
Аватар вне форума Ответить с цитированием
Старый 25.05.2014, 18:06   #3
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Да, с форматом что-то я ошибся) Формат datetime, переменная - потому что эту проверку нужно сделать в хранимой процедуре, значение даты записано в переменную из таблицы при помощи курсора и для этой переменной нужно выполнить проверку по времени года текущей даты. То есть, мы читаем из курсора дату и нужно определить к какому времени года она относится. Использую SQL Server 2012.
Nekit9401 вне форума Ответить с цитированием
Старый 25.05.2014, 18:14   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тип datetime, а не формат
Код:
IF MONTH(@MyDate)<3 SET @Period=1
ELSE IF MONTH(@MyDate)<6 SET @Period=2
ELSE IF MONTH(@MyDate)<9 SET @Period=3
ELSE IF MONTH(@MyDate)<12 SET @Period=4
ELSE SET @Period=4
или так
Код:
SET @Period=CASE WHEN MONTH(@MyDate)<3 THEN 1
                 WHEN MONTH(@MyDate)<6 THEN 2
                 WHEN MONTH(@MyDate)<9 THEN 3
                 WHEN MONTH(@MyDate)<12 THEN 4
                 ELSE 1 END
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.05.2014, 18:24   #5
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Спасибо за помощь!
Nekit9401 вне форума Ответить с цитированием
Старый 25.05.2014, 18:45   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
ELSE IF MONTH(@MyDate)<12 SET @Period=4
ELSE SET @Period=4
что такая нелюбовь к 13

это
ELSE IF MONTH(@MyDate)<12 SET @Period=4
лишнее
eval вне форума Ответить с цитированием
Старый 25.05.2014, 19:00   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
что такая нелюбовь к 13
То описка. 12-ый как раз зима, а значит
Код:
ELSE SET @Period=1
или в первом анализе =12 или <3. А вот квартал вытащить просто DATEPART. Вот еще варианты

Код:
SET @Period=DATEPART(quarter ,@MyDate)
IF MONTH(@MyDate) IN (3,6,9,12) SET @Period=@Period+1
IF @Period=5 SET @Period=1
и
Код:
SET @Period=(MONTH(@MyDate)+3)/3
IF @Period=5 SET @Period=1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.05.2014 в 19:10.
Аватар вне форума Ответить с цитированием
Старый 25.05.2014, 19:42   #8
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Еще есть вопрос, немного уже не про даты. Можно ли каким-то образом генерировать случайные числа при помощи rand, так, что бы выделять из каких именно промежутков должны генерироваться числа? Например, мы бросаем случайное число, если оно меньше или равно 0,5 то случайные числа генерируются из набора чисел от 31 до 60. Если же больше 0,5, то число генерируется из двух наборов от 1 до 30 и от 61 до 210, то есть числа из прошлого набора не должны включаться. Можно ли как-то сделать, что бы число генерировалось из двух наборов?
Nekit9401 вне форума Ответить с цитированием
Старый 25.05.2014, 19:45   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а смысл в таком отборе? и то и то случайно - следовательно равнозначно, сразу генерите 1-210, выхлоп будет один и тот-хе
eval вне форума Ответить с цитированием
Старый 25.05.2014, 19:49   #10
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Ок. Спасибо)
Nekit9401 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение высокосного года, сезона года и к-ва дне с начала года Делфи 7 (есть код программы полностью) программирование Помощь студентам 22 22.09.2013 23:59
Проверка формата даты в SQL-запросе Dux SQL, базы данных 2 28.05.2013 18:16
Запрос на вывод только года из даты SQL TommyG SQL, базы данных 5 26.12.2012 22:42
Для вводимой даты года вывести название соответствующего знака Зодиака (Qbasic) Anamnes Помощь студентам 0 09.11.2011 18:52
Вывод только одного года ('yyyy') из даты 'dd.mm.yyyy'. В Accese Droid БД в Delphi 13 09.12.2009 13:37