Das Format, in STR_TO_DATE angegeben nicht das Format von publish_date
entsprechen.
(Gibt es einen guten Grund, warum publish_date
nicht als DATETIME- Spalte definiert ist?)
Testen Sie Ihre Umwandlung, ein anderes Format verwenden, eine, die das Format der Strings paßt ...
SELECT STR_TO_DATE(publish_date,'%Y-%m-%d %T')
FROM `table`
LIMIT 10
Dieses zweite Argument der STR_TO_DATE-Funktion hat eine spezifische Bedeutung. Es ist nicht nur ein Wirrwarr von Kauderwelsch.
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
das Format der publish_date Zeichenfolge Gegeben entspricht dem Standardformat für MySQL DATETIME-, können Sie die expliziten Verweis weglassen könnte Funktion STR_TO_DATE:
MONTH(publish_date) = 11
Aber persönlich würde ich die STR_TO_DATE Funktion enthalten, um die Konvertierung explizit zu machen.
Aber wenn ich hatte zu tun, was Sie tun müssen, VARCHAR-Werte zu vergleichen, ich wouldn; t mit der Umwandlung es bisher Mühe, ich würde nur SUBSTRING-Funktion verwenden, um die fünfte bis achte Zeichen zu extrahieren
SUBSTR(publish_date,5,4) = '-11-'
Der Ausdruck auf der linken Seite des Vergleichs gibt NULL zurück. Und NULL ist niemals "gleich elf". Und dieser Ausdruck gibt NULL zurück, weil dies das Ergebnis der Umwandlung des Zeichenfolgenwerts in DATETIME ist, weil das angegebene Format (als zweites Argument für STR_TO_DATE) nicht mit dem Format des strnig-Werts übereinstimmt. MySQL kann die Zeichenfolge nicht in DATETIME konvertieren. – spencer7593