Получить год из отметки времени sql - PullRequest
10 голосов
/ 05 июля 2010

У меня проблема с извлечением года из поля отметки времени mysql.Мне удалось заставить его работать с полем даты и времени , используя этот метод:

SELECT id FROM TABLE WHERE YEAR(creation_date) = 2010

CREATE TABLE IF NOT EXISTS `pub_media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `title` text,
  `filename` text,
  `path` text,
  `serv_path` text,
  `type` enum('images','videos','files','audio','gallery') DEFAULT NULL,
  `keywords` text,
  `label_id` int(11) DEFAULT NULL,
  `creation_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `update_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  `rank` int(11) NOT NULL DEFAULT '0',
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Версия сервера: 5.1.41. Есть ли какой-нибудь способ выполнить это действие над полем отметки времени?Я хочу сохранить это действие в своем операторе SQL и не пытаться переместить его на PHP или любой другой язык сценариев, если это возможно.

Ответы [ 6 ]

13 голосов
/ 05 июля 2010

С какой проблемой вы сталкиваетесь, и можете ли вы включить вывод CREATE TABLE в свой вопрос?Это работает для меня на MySQL 5.1.41-3ubuntu12.3:

DROP TABLE IF EXISTS `table1`;

CREATE TABLE `table1` (
    `id` int(11) NOT NULL auto_increment,
    `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

INSERT INTO table1 (id) VALUES (1);

SELECT * FROM table1;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2010-07-05 15:32:11 |
+----+---------------------+

SELECT id FROM table1 WHERE YEAR(ts) = 2010;
+----+
| id |
+----+
|  1 |
+----+
6 голосов
/ 02 октября 2014

В моем случае cast () не работал. from_unixtime () сделал, хотя. Запрос будет следующий:

SELECT id FROM TABLE WHERE YEAR(FROM_UNIXTIME(creation_date)) = 2010
6 голосов
/ 05 июля 2010

использование CAST функция:)

SELECT id FROM TABLE WHERE YEAR(CAST(creation_date AS DATE))=2010

должно работать с отметкой времени создания_даты

[[править]], добавлено () вокруг приведения

2 голосов
/ 01 ноября 2016

Извлечение года из даты или отметки времени более переносимым способом:

SELECT id FROM table WHERE EXTRACT(year FROM creation_date) = 2010

Работает с MySQL, PostgreSQL, Oracle ...

2 голосов
/ 05 июля 2010

Следующее работает нормально,

SELECT id FROM TABLE WHERE DATE_FORMAT( creation_date,  "%Y" ) = "2010"

Форматирование данных действительно полезно для подобных запросов, я использовал его много раз для разбивки данных до 10-минутных интервалов, например ...

0 голосов
/ 06 сентября 2016
select * from table1 where year(ts) = 2016 and month(ts) = 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...