2016-07-20 1 views
0

Kann jemand erklären mir diese mysql query:SQL-Abfrage Debug

SELECT E.*, 
LAST_DAY(
    STR_TO_DATE(
    concat(
    LPAD(
     month(
     STR_TO_DATE(SUBSTRING(C.month, 1, 3),'%b')), 2, 0 
    ), '/', '01', '/', C.year),'%m/%d/%Y')) as calendar_date 

Ich verstehe nicht, zu welchem ​​Zeitpunkt es wählt .... eine Woche oder? Wahrscheinlich

+0

Ein bisschen schwer zu wissen, ohne den Rest der Abfrage und Informationen über die Tabellen verwendet. – Uueerdo

+0

es gibt ein "date" (oder eine datetime) des letzten Tages des Monats zurück (wie 28.-29. 30. oder 31., aber in einem vollen Datumsformat, basierend auf dem Datum, das über die Alias-Tabelle c kam. So es sorta erstellt interaktiv eine neue Zeichenkette, die das Datum zum ersten des Monats macht, aber der äußere Wrapper bringt den letzten Tag des Monats zurück, also wird calendar_date so aussehen: '2016-09-30' zum Beispiel – Drew

+0

This ist keine legale Abfrage, es hat keine FROM-Klausel – Hogan

Antwort

0

basiert auf der Verwendung des str_to_date von %b und Lesen der folgenden: MySQL: STR_TO_DATE Function,

die Daten würden muss Datumsinformation wie JAN FEB MAR haben, die den Teilstring von 3 Gebrauch erklärt. Wie in den Kommentaren gesagt, gibt es das letzte Datum des Monats wie

2006-01-31 
2016-09-30 

MySQL-Handbuch Seite für str_to_date() und LPAD()

Was LPAD, dass eine linke Pads den Monat mit führenden am weitesten links stehende 0en. In diesem Fall würde nur eine, also eine 7, zum Beispiel für Juli 07 gehen. Eine Date2016-7-31 würde später nicht glücklich sein. Aber ein Date von 2016-07-31 wäre.

0

,
c.month ist 'Januar', 'Februar', ...
und c.year ein bestimmtes Jahr (2016, 2017, ...).

Die Rückkehr ist:
Der letzte Tag des c.month in diesem c.year.

EDIT
Um es viel besser zu machen, könnten Sie mögen es tun:

select last_day(STR_TO_DATE(concat(C.year,', ' C.month), '%Y, %M'));