Mysql
 sql >> Baza danych >  >> RDS >> Mysql

YEAR() Przykłady – MySQL

W MySQL, YEAR() to wbudowana funkcja daty i czasu, która zwraca rok z podanego wyrażenia daty.

Zwraca rok jako liczbę z zakresu 1000 do 9999 . Dla dat zerowych może zwrócić 0 lub NULL z ostrzeżeniem, w zależności od wartości w Twoim sql_mode .

Składnia

Składnia wygląda tak:

YEAR(date)

Gdzie date jest wyrażeniem daty, z którego pochodzi rok.

Przykład

Oto przykład:

SELECT YEAR('2045-12-10');

Wynik:

2045

Wartości daty i godziny

Działa również z wartościami daty i godziny:

SELECT YEAR('2045-12-10 18:52:17');

Wynik:

2045

Zero dat

Zgodnie z dokumentacją MySQL zero dat daje w wyniku 0 . Jednak rzeczywisty wynik będzie zależał od wartości twojego sql_mode zmienna systemowa.

Domyślnie daty zerowe nie są dozwolone, dlatego wykonanie następujących czynności daje NULL z ostrzeżeniem:

SELECT YEAR('0000-00-00');

Wynik:

+--------------------+
| YEAR('0000-00-00') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

A oto ostrzeżenie:

show warnings;

Wynik:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '0000-00-00' |
+---------+------+----------------------------------------+

Otrzymałem to ostrzeżenie, ponieważ mój sql_mode zmienna systemowa zawiera NO_ZERO_DATE i NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode;

Wynik:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Zresetujmy mój sql_mode bez tych wartości:

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode;

Wynik:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Teraz uruchommy YEAR() funkcja ponownie z datą zerową:

SELECT YEAR('0000-00-00');

Wynik:

0

Tym razem otrzymujemy 0 , zgodnie z dokumentacją.

Pamiętaj, że NO_ZERO_DATE i NO_ZERO_IN_DATE są przestarzałe w momencie pisania. Dlatego można je usunąć w dowolnym momencie.

Daty numeryczne

Możliwe jest również przekazywanie dat jako liczby, o ile ma to sens jako data.

Przykład:

SELECT YEAR(20451210);

Wynik:

2045

Lub nawet następujący (który używa dwucyfrowego roku):

SELECT YEAR(451210);

Wynik:

2045

Ale to musi mieć sens jako randka. Oto, co się stanie, jeśli zwiększę część dnia do nieprawidłowego dnia:

SELECT YEAR(20451265);

Wynik:

+----------------+
| YEAR(20451265) |
+----------------+
|           NULL |
+----------------+
1 row in set, 1 warning (0.00 sec)

Możemy sprawdzić ostrzeżenie w następujący sposób:

show warnings;

Wynik:

+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1292 | Incorrect datetime value: '20451265' |
+---------+------+--------------------------------------+

Inne ograniczniki

Możesz użyć innych ograniczników daty. MySQL jest dość wyrozumiały, jeśli chodzi o ograniczniki dat. Oto kilka poprawnych przykładów:

SELECT 
    YEAR('2045/12/10'),
    YEAR('2045,12,10'),
    YEAR('2045:12:10'),
    YEAR('2045;12!10');

Wynik (przy użyciu wyjścia pionowego):

YEAR('2045/12/10'): 2045
YEAR('2045,12,10'): 2045
YEAR('2045:12:10'): 2045
YEAR('2045;12!10'): 2045

Aktualna data

Możemy przekazać NOW() jako argument datetime, aby użyć bieżącej daty:

SELECT 
    NOW(),
    YEAR(NOW());

Wynik:

+---------------------+-------------+
| NOW()               | YEAR(NOW()) |
+---------------------+-------------+
| 2021-10-17 11:09:23 |        2021 |
+---------------------+-------------+

Nieprawidłowe argumenty

Po przekazaniu nieprawidłowego argumentu YEAR() zwraca null :

SELECT YEAR('2030-65-78');

Wynik:

+--------------------+
| YEAR('2030-65-78') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

Sprawdź ostrzeżenie:

SHOW WARNINGS;

Wynik:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2030-65-78' |
+---------+------+----------------------------------------+

Brakujący argument

Wywołanie YEAR() z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:

SELECT YEAR();

Wynik:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

I kolejny przykład:

SELECT YEAR('2030-12-10', '2031-12-10');

Wynik:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', '2031-12-10')' at line 1

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL/zapisu pliku (Errcode 28)

  2. Jak zainstalować MySQLdb (biblioteka dostępu do danych Pythona do MySQL) na Mac OS X?

  3. Czy nazwy tabel w MySQL rozróżniają wielkość liter?

  4. Jak wybrać z MySQL, gdzie nazwa tabeli jest zmienna?

  5. Jak łatwo stworzyć prosty CRUD przy użyciu PHP i MySQL