我在从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 是否有simalar方法在时间戳字段上执行此操作?我想在我的SQL语句中保留此操作,如果可能的话,不要尝试将其移动到PHP或任何其他脚本语言。
答案 0 :(得分:13)
您遇到了什么问题,是否可以在问题中包含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 |
+----+
答案 1 :(得分:6)
使用CAST
功能:)
SELECT id FROM TABLE WHERE YEAR(CAST(creation_date AS DATE))=2010
应该与creation_date timestamp
一起使用[[edit]],在演员
周围添加()答案 2 :(得分:6)
在我的情况下,cast()无效。 from_unixtime()虽然做到了。查询将是以下一个:
SELECT id FROM TABLE WHERE YEAR(FROM_UNIXTIME(creation_date)) = 2010
答案 3 :(得分:2)
以下工作正常,
SELECT id FROM TABLE WHERE DATE_FORMAT( creation_date, "%Y" ) = "2010"
格式化数据对于像这样的查询非常有用,我已多次使用它来将数据分解为10分钟,例如...
答案 4 :(得分:2)
以更便携的方式从日期或时间戳中提取年份:
SELECT id FROM table WHERE EXTRACT(year FROM creation_date) = 2010
适用于MySQL,PostgreSQL,Oracle ......
答案 5 :(得分:0)
select * from table1 where year(ts) = 2016 and month(ts) = 9