2010-07-05 34 views
8

Tôi gặp sự cố khi trích xuất năm trong trường dấu thời gian mysql. Tôi quản lý để có được nó làm việc với một datetime lĩnh vực sử dụng phương pháp này:Lấy năm ra khỏi dấu thời gian sql

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 ; 

Server phiên bản: 5.1.41 Có cách nào simalar để thực hiện thao tác này trên một sân timestamp? Tôi muốn giữ hành động này trong câu lệnh SQL của tôi và không cố gắng chuyển nó sang PHP hoặc bất kỳ ngôn ngữ kịch bản nào khác, nếu có thể.

Trả lời

9

vấn đề gì được bạn gặp phải, và có thể bạn bao gồm đầu ra của CREATE TABLE trong câu hỏi của bạn? Này làm việc cho tôi trên 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 | 
+----+ 
+0

không, tôi không biết tại sao nó không hoạt động trên DB của tôi. Có lẽ vì tôi sử dụng MyISAM thay vì InnoDB làm DB Engine? –

+0

Tôi vừa thử nó với MyISAM, và nó cũng hoạt động. Bạn có thể chỉnh sửa câu hỏi của mình và đưa đầu ra từ 'TẠO TABLE

' không? Ngoài ra, bạn đang sử dụng phiên bản MySQL nào? – Mike

+0

đã thêm cả hai yêu cầu –

5

sử dụng chức năng CAST :)

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

nên làm việc với CREATION_DATE timestamp

[[sửa]], bổ sung() xung quanh đúc

+0

tôi nhận được lỗi này: Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần 'creation_date AS DATE) = 2010 AND deleted = 0 ORDER BY xếp hạng DESC' tại dòng 1 sử dụng truy vấn này: SELECT id, title FROM pub_media WHERE YEAR (CAST creation_date AS DATE) = 2010 VÀ bị xóa = 0 ORDER BY xếp hạng DESC mysql v. 5.1.41 –

+0

hey các bạn, điều này không hoạt động, ngừng kéo nó lên :) –

+0

thêm bị lãng quên() trên CAST – dweeves

2

Các công trình sau ok,

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

Định dạng dữ liệu là thực sự hữu ích cho các truy vấn như thế này, tôi đã sử dụng nó nhiều lần để chia nhỏ dữ liệu xuống còn 10 phút chẳng hạn ...

+0

hơn ai đó nên thực hiện một tốc độ nhanh nhất về tốc độ nhanh nhất, sử dụng DATE_FORMAT hoặc TYPE ..: p –

5

Trong trường hợp cast của tôi() không hoạt động. from_unixtime() đã làm. Các truy vấn sẽ là một trong sau:

SELECT id FROM TABLE WHERE YEAR(FROM_UNIXTIME(creation_date)) = 2010 
0
select * from table1 where year(ts) = 2016 and month(ts) = 9 
+2

Câu trả lời này xuất hiện trong hàng đợi đánh giá chất lượng thấp, có lẽ vì bạn không cung cấp bất kỳ lời giải thích nào về mã. Nếu mã này trả lời câu hỏi, hãy cân nhắc việc thêm một số văn bản giải thích mã trong câu trả lời của bạn. Bằng cách này, bạn có nhiều khả năng nhận được nhiều upvotes hơn - và giúp người hỏi tìm hiểu điều gì đó mới mẻ. – lmo

0

Extract năm kể từ ngày hoặc dấu thời gian theo cách cầm tay hơn:

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

trình với MySQL, PostgreSQL, Oracle ...

Các vấn đề liên quan