Синтаксис SQL для получения данных в дату - PullRequest
0 голосов
/ 20 июня 2019

У меня есть таблица 'зарплаты' с полем 2 временных меток, from_date и to_date

no | salary | from_date     | to_date   |
------------------------------------------
1  | 30000  | 1995-12-03    | 1996-12-02 |
2  | 31000  | 1996-12-02    | 1997-12-02 |
3  | 32000  | 1997-12-02    | 1998-12-02 |
4  | 35000  | 1998-12-02    | 1999-12-02 |
5  | 37000  | 1999-12-02    | 2000-12-01 |
6  | 38000  | 2000-12-01    | 2001-12-01 |

Я хочу получить зарплату в 2000 году, поэтому результатом должны быть строки 5 и 6. Имеется синтаксис, который я использовал:

SELECT * FROM salaries 
WHERE DATE_FORMAT(salaries.from_date,'%Y') <= DATE_FORMAT('2000-06-20','%Y') 
AND DATE_FORMAT(salaries.to_date,'%Y') >= DATE_FORMAT('2000-06-20','%Y')


5  | 37000  | 1999-12-02    | 2000-12-01 |
6  | 38000  | 2000-12-01    | 2001-12-01 |

На самом деле запрос работает хорошо; но есть ли другие решения для запросов? какое решение для запроса вы предложили?

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Вы хотите пересечения таймфреймов. Правильная логика:

SELECT s.*
FROM salaries s
WHERE s.from_date < '2001-01-01' AND 
      s.to_date >= '2000-01-01';

Отчет о заработной плате охватывает 2000 год, если он начинается до конца года и заканчивается после начала года.

0 голосов
/ 20 июня 2019

Пожалуйста, попробуйте этот запрос:

SELECT * FROM salaries
WHERE year(to_date) in (2000) and year(from_date) in (2000);

ref: [https://www.plus2net.com/sql_tutorial/between-date.php][1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...