2017-05-03 5 views
4

In meiner Tabelle habe ich mehrere Arten von Datumsformat in der Tabelle Spalte für z.Zählen und wählen Sie unterschiedliche Datumsformat-Typ aus der Tabellenspalte

20 May 1984 
20.03.2004 
20/June/2005 
20 August 1925 

So, wie Sie bestimmte Datumsformate erhalten, die auf meinem Tisch verwendet werden.

Ausgabe sollte wie folgt sein: -

column | count 
-------|------------ 
d M y | 15 
d.m.y | 25 
d/M/y | 12 
d F y | 10 
+0

möchten, Klarstellen, dass alle oben genannten Formate in einem einzigen Feld auftreten können? – toonice

+0

@toonice Dies ist eine alte Tabelle und haben kein bestimmtes Datumsformat, weshalb es mehrere Datumsformat haben – Paramjeet

+0

Kann ich den Datentyp dieses Feldes wissen? –

Antwort

4

Sie STR_TO_DATE dieses Problem zu lösen können. STR_TO_DATE gibt NULL, wenn der Wert nicht im angegebenen Format gelesen werden konnte. Also mit SUM und CASE WHEN Sie die gefundenen Daten mit dem angegebenen Format zählen:

SELECT 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d %M %Y') IS NULL THEN 1 ELSE 0 END) AS 'd M y', 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d.%m.%Y') IS NULL THEN 1 ELSE 0 END) AS 'd.m.y', 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d/%M/%Y') IS NULL THEN 1 ELSE 0 END) AS 'd/M/y' 
FROM table_name 

Demo:http://sqlfiddle.com/#!9/bc0e9/2/0

Sie können mit STR_TO_DATE wie im obigen Beispiel mehr solche Regeln hinzuzufügen. Sie können eine Übersicht mit allen Formatbezeichner auf MySQL finden Sie hier: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

Hinweis: Es gibt keine Erkennung für Datumsformate in MySQL, so dass Sie die Werte auf Ihrem Spalte überprüfen müssen alle möglichen Datumsformate zu erhalten .

+0

Ihre Antwort ist für die spezifische Bedingung. Meine Tabelle ist zu lang. Wenn ich nicht weiß, welches Datumsformat in der Tabelle steht. In diesem Zustand, was werde ich tun? – Paramjeet

0

Sie mögen, wie unten tun können:

SELECT 

    IF(cdate REGEXP (' ') , 'd M Y' , 
     IF(cdate REGEXP ('.') , 'd.m.Y' , 
      IF(cdate REGEXP ('/') , 'd/M/Y' ,'1') 
     ) 
    ) AS format_type , count(id) as total 


FROM datawithdate GROUP BY format_type 

Hier cdate ist Ihre Spaltennamen und datawithdate ist Tabellenname. Sie können mit Ihrem ursprünglichen ersetzen und versuchen Sie es

Demo:http://sqlfiddle.com/#!9/50809/1

Hinweis: Ich habe 1 in anderen Zustand versetzt, aber Sie können mehr verwenden, wenn Sie

+0

Ihre Antwort ist für die spezifische Bedingung. Meine Tabelle ist zu lang. Wenn ich nicht weiß, welches Datumsformat in der Tabelle steht. In diesem Zustand, was werde ich tun? – Paramjeet

+0

Zuerst müssen Sie alle Datumsformat finden. Sie können dies verwenden: 'SELECT Datefield' aus der Tabelle GROUP von datafield' Diese Abfrage wird Ihnen alle eindeutigen Datumsformat Datum. Das wird Ihnen helfen zu sehen, wie viele Datumsformate in Ihrer Tabelle verfügbar sind –

Verwandte Themen