从时间戳sql中获取年份

Sam*_*ghs 10 mysql timestamp

我在从mysql时间戳字段中提取年份时遇到问题.我设法使用此方法使用datetime字段:

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 ;
Run Code Online (Sandbox Code Playgroud)

服务器版本:5.1.41是否有一种simalar方式在时间戳字段上执行此操作?我想在我的SQL语句中保留此操作,如果可能的话,不要尝试将其移动到PHP或任何其他脚本语言.

Mik*_*ike 14

您遇到了什么问题,是否可以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 |
+----+
Run Code Online (Sandbox Code Playgroud)


use*_*153 9

以更便携的方式从日期或时间戳中提取年份:

SELECT id FROM table WHERE EXTRACT(year FROM creation_date) = 2010
Run Code Online (Sandbox Code Playgroud)

适用于 MySQL、PostgreSQL、Oracle...


Jua*_* NR 7

在我的情况下,cast()不起作用.from_unixtime()虽然做到了.查询将是以下一个:

SELECT id FROM TABLE WHERE YEAR(FROM_UNIXTIME(creation_date)) = 2010
Run Code Online (Sandbox Code Playgroud)


dwe*_*ves 6

使用CAST功能:)

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

应该使用creation_date时间戳

[[edit]],在演员周围添加()