В този раздел ще научим как датите могат да се сравняват в SQL.
- Можем да сравним произволна дата с друга дата, съхранена в колона на таблица.
- Това сравнение може да се направи с помощта на оператори за сравнение като >, <,>=,>=, =.
- Дата () функцията също се използва в SQL за сравняване на две различни дати.
- Типът данни DATE позволява съхраняване на датите в SQL таблици във формат „ГГГГ-ММ-ДД“. Но докато пишете заявката за сравняване на датите, датата, която трябва да бъде записана в заявката, може да бъде в спокоен низов формат.
- Според облекчения формат на низовете различните части на датата могат да бъдат разделени с помощта на произволен знак между тях. MySQL също така позволява да се записва дата в заявка без никакъв разделител, при условие че низът, написан като дата, образува разумна дата.
Пример 1:
Напишете заявка, за да намерите всички служители, чиято дата на присъединяване е по-голяма или същата като 5 май 1999 г.
Създайте база данни с името „dbemployee ” с създадена в него таблица „служител“. Ще разгледаме тази таблица и база данни за всички следващи примери.
mysql> CREATE DATABASE dbemployee;
Query OK, 1 row affected (0.00 sec)
mysql> USE dbemployee;
Database changed
mysql> CREATE TABLE employee (Emp_Id INT NOT NULL, Emp_Name VARCHAR (20), Emp_Dept VARCHAR (20), Emp_Salary INT, Emp_Joining_Date DATE);
Query OK, 0 rows affected (0.09 sec)
Създадохме нова база данни с името „dbemployee“ и с командата „USE dbemployee“ избрахме тази база данни. След това с командата „CREATE TABLE“ създадохме таблица „служител“ в базата данни „dbemployee“.
Сега ще вмъкнем данни в създадената по-горе таблица.
mysql> INSERT INTO employee VALUES (1, "Sana Khan", "HRM", 45000, "1999-06-17");
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO employee VALUES (2, "Anupama Deshmukh", "Finance", 32000, CURDATE ());
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO employee VALUES (3, "Kajal Shah", "Purchasing", 71000, "2020-12-12");
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO employee VALUES (4, "Mayuri Koli", "Accounts", 64000, "1987-08-18");
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO employee VALUES (5, "Surili Maheshwari", "Production", 30000, "1970-10-10");
Query OK, 1 row affected (0.09 sec)
След като вмъкнем успешно данни в таблицата, сега ще извлечем всички записи на таблица.
mysql> SELECT *FROM employee;
+--------+-------------------+------------+------------+------------------+
| Emp_Id | Emp_Name | Emp_Dept | Emp_Salary | Emp_Joining_Date |
+--------+-------------------+------------+------------+------------------+
| 1 | Sana Khan | HRM | 45000 | 1999-06-17 |
| 2 | Anupama Deshmukh | Finance | 32000 | 2021-06-26 |
| 3 | Kajal Shah | Purchasing | 71000 | 2020-12-12 |
| 4 | Mayuri Koli | Accounts | 64000 | 1987-08-18 |
| 5 | Surili Maheshwari | Production | 30000 | 1970-10-10 |
+--------+-------------------+------------+------------+------------------+
5 rows in set (0.00 sec)
Сега нека напишем заявка за дадения проблем.
mysql> SELECT *FROM employee WHERE Emp_Joining_Date >= '1999-05-05';
Изход:
+--------+------------------+------------+------------+------------------+
| Emp_Id | Emp_Name | Emp_Dept | Emp_Salary | Emp_Joining_Date |
+--------+------------------+------------+------------+------------------+
| 1 | Sana Khan | HRM | 45000 | 1999-06-17 |
| 2 | Anupama Deshmukh | Finance | 32000 | 2021-06-26 |
| 3 | Kajal Shah | Purchasing | 71000 | 2020-12-12 |
+--------+------------------+------------+------------+------------------+
3 rows in set (0.00 sec)
Има трима служители с идентификационни номера на служители 1, 2 и 3, чиято дата на присъединяване е по-голяма от 5 май 1999 г.
Пример 2:
Напишете заявка, за да намерите всички служители, чиято дата на присъединяване е по-малка или същата като 5 май 1999 г.
mysql> SELECT *FROM employee WHERE Emp_Joining_Date <= '19990505';
Изход:
+--------+-------------------+------------+------------+------------------+
| Emp_Id | Emp_Name | Emp_Dept | Emp_Salary | Emp_Joining_Date |
+--------+-------------------+------------+------------+------------------+
| 4 | Mayuri Koli | Accounts | 64000 | 1987-08-18 |
| 5 | Surili Maheshwari | Production | 30000 | 1970-10-10 |
+--------+-------------------+------------+------------+------------------+
2 rows in set (0.00 sec)
Двама служители с идентификационни номера на служители 4 и 5, чиято дата на присъединяване е по-малка от 5 май 1999 г.
Пример 3:
Напишете заявка, за да намерите всички служители, чиято дата на присъединяване е същата като 8 август 1987 г.
mysql> SELECT *FROM employee WHERE Emp_Joining_Date = 19870818;
Изход:
+--------+-------------+----------+------------+------------------+
| Emp_Id | Emp_Name | Emp_Dept | Emp_Salary | Emp_Joining_Date |
+--------+-------------+----------+------------+------------------+
| 4 | Mayuri Koli | Accounts | 64000 | 1987-08-18 |
+--------+-------------+----------+------------+------------------+
1 row in set (0.00 sec)
Има само един служител с идентификатор на служител 4, чиято дата на присъединяване е равна на 18 август 1987 г.
Използване на date()
Пример 4:
Напишете заявка с помощта на функцията дата (), за да намерите всички служители, чиято дата на присъединяване е същата като 26 юни 2021 г.
mysql> SELECT *FROM employee WHERE date (Emp_Joining_Date) = '2021-06-26';
Изход:
+--------+------------------+----------+------------+------------------+
| Emp_Id | Emp_Name | Emp_Dept | Emp_Salary | Emp_Joining_Date |
+--------+------------------+----------+------------+------------------+
| 2 | Anupama Deshmukh | Finance | 32000 | 2021-06-26 |
+--------+------------------+----------+------------+------------------+
1 row in set (0.00 sec)
Има само един служител с идентификатор на служител 2, чиято дата на присъединяване е равна на 26 юни 2021 г.