2010-07-05 16 views
8

Ich habe ein Problem, das Jahr aus einem mysql Timestamp-Feld zu extrahieren. Ich konnte es mit einem Datetime-Feld erhalten arbeitet mit dieser Methode:Holen Sie sich das Jahr aus Timestamp 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-Version: 5.1.41 Gibt es einen simalar Weg, um diese Aktion auf einem Zeitstempel-Feld durchführen? Ich möchte diese Aktion in meiner SQL-Anweisung beibehalten und nicht versuchen, sie nach Möglichkeit in PHP oder eine andere Skriptsprache zu verschieben.

Antwort

9

Welches Problem haben Sie stoßen und können Sie enthalten die Ausgabe von CREATE TABLE in Ihrer Frage? Dies funktioniert für mich auf 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

heck nein, ich weiß nicht, warum es nicht funktioniert auf meiner DB. Vielleicht weil ich MyISAM anstelle von InnoDB als DB Engine verwende? –

+0

Ich habe es gerade mit MyISAM versucht, und das funktioniert auch. Können Sie Ihre Frage bearbeiten und die Ausgabe von 'CREATE TABLE

' hinzufügen? Welche Version von MySQL verwenden Sie? – Mike

+0

hinzugefügt beide Anfragen –

5

Verwendung CAST Funktion :)

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

sollte mit creation_date Zeitstempel arbeiten

[[bearbeiten]], hinzugefügt() umgossen

+0

I bekomme diesen Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax in der Nähe von 'creation_date AS DATE' = 2010 AND deleted = 0 ORDER BY rank DESC 'bei Zeile 1 SELECT ID, Titel FROM pub_media WHERE YEAR (CAST creation_date AS DATE) = 2010 UND gelöscht = 0 ORDER BY rank DESC mysql v. 5.1.41 –

+0

hey ihr Jungs, das funktioniert nicht, hör auf, es aufzuziehen :) –

+0

hinzugefügt vergessen() auf CAST – dweeves

2

Folgende Arbeiten ok,

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

die Formatierung der Daten ist für Anfragen wie diese wirklich nützlich, habe ich es mehrfach verwendet Zum Beispiel, um Daten in 10-Minuten-Intervallen zu zerlegen ...

+0

als jemand sollte eine Geschwindigkeitstest auf was ist am schnellsten, mit DATE_FORMAT oder TYPE Besetzung ..: p –

5

In meinem Fall hat cast() nicht funktioniert. from_unitime() tat das aber. Die Abfrage wäre die folgende:

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

Diese Antwort wurde in der niedrigen Qualität Überprüfung Warteschlange, vermutlich, weil Sie keine Erklärung des Codes zur Verfügung stellen. Wenn dieser Code die Frage beantwortet, sollten Sie in Erwägung ziehen, etwas Text hinzuzufügen, der den Code in Ihrer Antwort erklärt. Auf diese Weise erhalten Sie mit höherer Wahrscheinlichkeit mehr Upvotes - und helfen dem Fragesteller, etwas Neues zu lernen. – lmo

0

Extract Jahr ab dem Datum oder Zeitstempel in tragbarer Weise:

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

Arbeiten mit MySQL, PostgreSQL, Oracle ...

Verwandte Themen