2016-05-18 6 views
1

Есть ли возможность ввести if else для данного запроса mysql? Этот запрос выводится в 4 столбца. Может ли это быть в одном столбце?MySql If else condition

SELECT 
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','07', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '09', '-', '30'), CONCAT(YEAR(CURDATE() - 1), '.', '1'), 0) AS 'Q1', 
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE() - 1),'-','10','-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '12', '-', '31'), CONCAT(YEAR(CURDATE() - 1), '.', '2'),0) AS 'Q2', 
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE()), '-', '01', '-', '01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '03', '-', '31'), CONCAT(YEAR(CURDATE()), '.', '3'), 0) AS 'Q3', 
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE()), '-', '04', '-', '01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '06', '-', '31'), CONCAT(YEAR(CURDATE()), '.', '4'), 0) AS 'Q4' 
FROM 
    regression 

Решение:

Спасибо всем за ваши комментарии. Я реализовал с делом, и это сработало.

SELECT 
CASE 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','07', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '09', '-', '30') THEN (CONCAT(YEAR(CURDATE() - 1), '.', '1')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','10', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '12', '-', '31') THEN (CONCAT(YEAR(CURDATE() - 1), '.', '2')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE()), '-','01', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '03', '-', '31') THEN (CONCAT(YEAR(CURDATE()), '.', '3')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE()), '-','04', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '06', '-', '31') THEN (CONCAT(YEAR(CURDATE()), '.', '4')) 
END as 'Quarter' 
FROM 
regression 
+0

Вы можете использовать вложенный IF или синтаксис CASE. https://dev.mysql.com/doc/refman/5.7/ru/case.html – MiltoxBeyond

ответ

0

Вы хотите рассчитать фактический кватер?

использовать это:

SELECT QUARTER(now()); 

образец

MariaDB [(none)]> SELECT QUARTER(now()); 
+----------------+ 
| QUARTER(now()) | 
+----------------+ 
|    2 | 
+----------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> SELECT QUARTER('2015-10_07'); 
+-----------------------+ 
| QUARTER('2015-10_07') | 
+-----------------------+ 
|      4 | 
+-----------------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> 
+0

Спасибо, Бернд. Мне нужно индивидуальное значение финансового квартала на основе диапазона дат. Например .01-янв-2016 До 31 марта 2016 года называется Q3 – IamRKY

+0

Подождите ... может быть, вы можете просто вычесть определенную фиксированную сумму с каждой даты, чтобы сдвинуть четверти? –

+0

да, пожалуйста, укажите диапазоны для каждого квартала –

0

Просто перенести дату на 7 месяцев, чтобы получить пользовательские четверти вы хотите:

SELECT(QUARTER(DATE_SUB(execution_date, INTERVAL 7 MONTH))) 
FROM regression 

Если вы хотите используйте свой оригинальный подход, затем продолжайте читать. Я видел несколько проблем/неэффективности в вашем запросе, которые я попытался исправить. Во-первых, потому что ваш запрос находится в таблице regression, вам не нужно явно ссылаться на эту таблицу при выборе столбцов, поэтому я покончил с этим. Во-вторых, вы пытаетесь сравнить execution_date, который предположительно является типом даты для строк, который является типом, который выводит CONCAT(). Поэтому я использовал STR_TO_DATE(), чтобы преобразовать строки, созданные вручную, в фактические типы данных. Наконец, я заменил то, что было бы кошмарным набором вложенных операторов IF с одним выражением CASE.

CASE WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '07', '-', '01'), '%Y-%m-%d') AND 
      execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '09', '-', '30'), '%Y-%m-%d') 
    THEN CONCAT(YEAR(CURDATE() - 1), '.', '1') 
    WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '10', '-', '01'), '%Y-%m-%d') AND 
      execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '12', '-', '31'),'%Y-%m-%d') 
    THEN CONCAT(YEAR(CURDATE() - 1), '.', '2') 
    WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '01', '-', '01'), '%Y-%m-%d') AND 
      execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '03', '-', '31'), '%Y-%m-%d') 
    THEN CONCAT(YEAR(CURDATE()), '.', '3') 
    WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '04', '-', '01'), '%Y-%m-%d') AND 
      execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '06', '-', '31'), '%Y-%m-%d') 
    THEN CONCAT(YEAR(CURDATE()), '.', '4') 
    ELSE '0' END AS theQuarter 
FROM regression