2010-07-05 18 views
8

Tengo un problema para extraer el año de un campo de marca de tiempo mysql. He conseguido que funcione con un campo de fecha y hora usando este método: VersiónObtenga el año de la marca de tiempo 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 ; 

servidor: 5.1.41 ¿Hay alguna manera simalar para llevar a cabo esta acción en un campo de marca de tiempo? Quiero mantener esta acción en mi declaración de SQL y no intentar moverla a PHP o cualquier otro lenguaje de scripting, si es posible.

Respuesta

9

¿Qué problema encontrarse con, y puede ¿Incluye la salida CREATE TABLE en su pregunta? Esto funciona para mí en 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

diablos, no, no sé por qué no funciona en mi base de datos. Tal vez porque utilizo MyISAM en lugar de InnoDB como el motor de DB? –

+0

Acabo de probarlo con MyISAM, y eso también funciona. ¿Puedes editar tu pregunta e incluir la salida de 'CREATE TABLE

'? Además, ¿qué versión de MySQL estás usando? – Mike

+0

agregó ambas solicitudes –

5

uso CAST función :)

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

debe trabajar con marca de tiempo creation_date

[[editar]], añadido() alrededor del yeso

+0

I Estoy obteniendo este error: tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'fecha_de_cuenta AS DATE) = 2010 Y eliminado = 0 ORDER BY rank DESC' en la línea 1 usando esta consulta: SELECCIONE id, título FROM pub_media DONDE AÑO (CAST creation_date AS DATE) = 2010 AND deleted = 0 ORDER BY rank DESC mysql v. 5.1.41 –

+0

Hola chicos, esto no funciona, deja de jalar :) –

+0

añadido forgotten() en CAST – dweeves

2

Las siguientes obras ok,

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

formato a los datos es realmente útil para las consultas de este tipo, lo he utilizado en numerosas ocasiones para romper datos a intervalos de 10 minutos, por ejemplo ...

+0

que alguien debería hacer una prueba de velocidad en lo que es más rápido, usando DATE_FORMAT o TYPE emitido ..: p –

5

En mi caso, el molde() no funcionó. from_unixtime() hizo sin embargo. La consulta sería la siguiente:

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

Esta respuesta apareció en la cola de revisión de baja calidad, presumiblemente porque no proporciona ninguna explicación del código. Si este código responde a la pregunta, considere agregar agregando texto que explique el código en su respuesta. De esta forma, es mucho más probable que obtengas más votos ascendentes y ayudes al indagador a aprender algo nuevo. – lmo

0

Extracto año desde la fecha o marca de tiempo en forma más portátil:

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

Funciona con MySQL, PostgreSQL, Oracle ...

Cuestiones relacionadas