2016-03-26 39 views
0
Benim tarih biçimidir

: YYYYMMDDMySQL sözdizimi hatası', 1);

CURDATE() returns: YYYY-MM-DD 

Ben started_on haftalık kayıtları istemek ve böylece çalıştı mysql kullanarak başarısız oldu:

SELECT SPLIT_STR(started_on, ' - ', 1), failed FROM 1_results WHERE (DATE_SUB(REPLACE(CURDATE(), '-', ''), INTERVAL 7 DAY) <= SPLIT_STR(started_on, ' - ', 1); 

Ama alma hatası:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 2 

çalıştıda hayır ama hayır şans.

Bireysel olarak çalışan SPLIT_STR(started_on, ' - ', 1) and REPLACE(CURDATE(), '-', '') iyi çalışıyor, ancak sorgunun üstesinden gelemiyor.

Çözüm bulmak için bana yardımcı olabilecek herhangi biri var mı?

+1

Tablonuzdaki 'started_on' türü nedir? – Loufylouf

+0

varchar (tarih değil) :) –

+0

Tamam o zaman gerçekten bir tarih formatına geçmeyi düşünmelisiniz, çünkü tarih karşılaştırmaları bu şekilde daha kolay. – Loufylouf

cevap

1

started_on bir dize düşünülürse, yapılacak en iyi şey bu gibi STR_TO_DATE işlevini kullanarak uygun bir MySQL tarihi olarak bu dönüştürmek olacaktır: olacak

STR_TO_DATE(started_on, '%Y%m%d') 

uygun bir tarih dönmek olduğunu sonra kolayca karşılaştırmalar yapmak için kullanabilirsiniz. Halen değişmesi gereken tek şey, geçerli tarihten itibaren 7 gün çıkardığınız bölümdür. Gerçekten de aşırı karmaşık, sadece gerekir:

DATE_SUB(CURDATE(), INTERVAL 7 DAY) 

Yani bütün sorgu sadece dönüşür:

SELECT SPLIT_STR(started_on, ' - ', 1), failed FROM 1_results 
WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= STR_TO_DATE(started_on, '%Y%m%d') ; 
+0

Teşekkürler Loufylouf. Sorgunuz kısmen işe yaradı, sonuçta çok yerine 1 sonuç döndürdü. SELECT SPLIT_STR (started_on, '-', 1), FROM 1_results WHERE (DATE_SUB (CURDATE(), INTERVAL 7 DAY) <= STR_TO_DATE (started_on, '% Y% m% d')) ve (suite = 'Full') başarısız oldu) ve (status = 'Tamamlandı') ve (start_on boş değil) ve (başarısız değil null) ve (start_on <> '-') ve (başarısız oldu <> '-') ve (started_on <> '') ve (başarısız oldu <> ''); Bu sorunu benim için çözerseniz çok iyi olur. –

+0

Kısaca, sadece 1 haftanın kaydını (geçen hafta) verir. –

+0

Tamam, sorgunuzu kullanarak çalışmayı ama yeni problemi çözdüm, önceki yıla bakmıyor ve sadece haftalık 2016 kayıtlarını döndürüyor.$ sql = "SELECT SPLIT_STR (begin_on, '-', 1), start_on olarak, 1_results FRANSINDAN (DATE_SUB (DATE_FORMAT (CURDATE(), '% Y% m% d'), ARALIK 30 GÜN) <= DATE_FORMAT (SPLIT_STR (begin_on, '-', 1), '% Y% m% d')) ve (status = 'Tamamlandı') ve (start_on, null değil) ve (başarısız değil null) ve (started_on <> '-')) ve (başarısız oldu <> '-') ve (started_on <> '') ve (başarısız <> '') "; Bir ipucu? Yardıma ihtiyaç var. –