Mysql
 sql >> база данни >  >> RDS >> Mysql

YEAR() Примери – MySQL

В MySQL, YEAR() е вградена функция за дата и час, която връща годината от даден израз за дата.

Връща годината като число в диапазона 1000 до 9999 . За нулеви дати може да върне 0 или NULL с предупреждение, в зависимост от стойностите във вашия sql_mode .

Синтаксис

Синтаксисът е така:

YEAR(date) 

Където date е изразът за дата, от който да получите годината.

Пример

Ето един пример:

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

Резултат:

2045

Стойности за дата и час

Работи и със стойности за дата и час:

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

Резултат:

2045

Нулеви дати

Според документацията на MySQL нулевите дати водят до 0 . Реалният резултат обаче ще зависи от стойността на вашия sql_mode системна променлива.

По подразбиране нулевите дати не са разрешени и следователно извършването на следното произвежда NULL с предупреждение:

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

Резултат:

+-------------------+| ГОДИНА('0000-00-00') |+-------------------+| NULL |+-------------------+1 ред в комплект, 1 предупреждение (0,00 сек)

И ето предупреждението:

show warnings; 

Резултат:

+--------+------+---------------------------- -----------+| Ниво | Код | Съобщение |+--------+------+------------------------------ ----------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'0000-00-00' |+---------+------+------------------- --------------------+

Получих това предупреждение, защото моят sql_mode системната променлива включва NO_ZERO_DATE и NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode; 

Резултат:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Нека нулираме моя sql_mode без тези стойности:

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

Резултат:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Сега нека изпълним YEAR() функция отново с нулева дата:

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

Резултат:

0

Този път получаваме 0 , съгласно документацията.

Обърнете внимание, че NO_ZERO_DATE и NO_ZERO_IN_DATE са отхвърлени към момента на писане. Следователно те могат да бъдат премахнати по всяко време.

Числови дати

Възможно е също да предавате дати като число, стига да има смисъл като дата.

Пример:

SELECT YEAR(20451210); 

Резултат:

2045

Или дори следното (което използва двуцифрена година):

SELECT YEAR(451210); 

Резултат:

2045

Но трябва да има смисъл като среща. Ето какво се случва, ако увелича частта от деня до невалиден ден:

SELECT YEAR(20451265); 

Резултат:

+----------------+| ГОДИНА(20451265) |+----------------+| NULL |+----------------+1 ред в комплект, 1 предупреждение (0,00 сек.)

Можем да проверим предупреждението по следния начин:

show warnings; 

Резултат:

+--------+------+---------------------------- ---------+| Ниво | Код | Съобщение |+--------+------+------------------------------ --------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'20451265' |+--------+------+------------------------ --------------+

Други ограничители

Можете да използвате други разделители за датата. MySQL е доста прощаващ, когато става въпрос за разделители на дати. Ето няколко валидни примера:

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

Резултат (с помощта на вертикален изход):

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

Текуща дата

Можем да предадем NOW() като аргумент datetime, за да използвате текущата дата:

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

Резултат:

<пред>+---------------------+------------+| СЕГА() | ГОДИНА(СЕГА()) |+---------------------+------------+| 17.10.2021 11:09:23 | 2021 |+---------------------+------------+

Невалидни аргументи

Когато се подаде невалиден аргумент, YEAR() връща null :

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

Резултат:

+-------------------+| YEAR('2030-65-78') |+-------------------+| NULL |+-------------------+1 ред в комплект, 1 предупреждение (0,00 сек)

Проверете предупреждението:

SHOW WARNINGS; 

Резултат:

+--------+------+---------------------------- -----------+| Ниво | Код | Съобщение |+--------+------+------------------------------ ----------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'2030-65-78' |+---------+------+------------------- --------------------+

Липсващ аргумент

Извикване на YEAR() с грешен брой аргументи или без подаване на аргументи, води до грешка:

SELECT YEAR(); 

Резултат:

ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на версията на вашия MySQL сървър за правилния синтаксис, който да използвате близо до ')' на ред 1

И още един пример:

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

Резултат:

ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на версията на вашия MySQL сървър за правилния синтаксис, който да използвате близо до ', '2031-12-10')' на ред 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. Как да открием UTF-8 символи в колона, кодирана с Latin1 - MySQL

  2. Сортиране по дата и час в низходящ ред?

  3. node.js + mysql пул на връзки

  4. MySQLSyntaxErrorException близо до ? когато се опитвате да изпълните PreparedStatement

  5. Как да ограничим достъпа до MySQL порт