Într-un tabel de baze de date am creat un atribut date, dar i-am setat tipul la varchar
Date
. Întrebarea mea este: voi putea în continuare să compar astfel de date într-o interogare SQL?
Datele din DB sunt stocate în acest format:
zz / ll / aaaa hh: mm: ss
Trebuie să fac o interogare SQL în PHP care să arate cam așa:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
„date” arată astfel: 07/08/2015 15:15:02
Aș aprecia un exemplu despre cum pentru a face acest lucru.
Comentarii
Răspuns
În funcție de baza de date pe care o utilizați, ar trebui să puteți arunca șirul la o dată și apoi să faceți comparația.
adică în Sql Server
cast(date as datetime) >= "20150131" ...
Acestea fiind spuse, aș recomanda de obicei să stocați data ca dată, dacă este posibil, și dacă trebuie să utilizați șiruri, Ar fi cel mai bine să folosiți un format mai standardizat
adică "YYYY-mm-dd"
sau chiar mai bine "YYYYmmdd"
în loc de "mm/dd/YYYY"
care, de exemplu, poate fi ușor amestecat cu "dd/mm/YYYY"
care este comun în multe culturi. Vedeți această postare pe blog: Obiceiuri proaste pentru a da drumul: gestionarea greșită a datelor / intervalului de întrebări
Comentarii
- și ' este de obicei recomandat să utilizați un fromat standard pentru date, cum ar fi
'YYYY-mm-dd'
sau chiar mai bun'YYYYmmdd'
și nu'mm/dd/YYYY'
care este ambiguă și interpretarea acestuia de către SQL-Server depinde de setările locale. - @ypercube, de acord , actualizat.
Răspuns
Există „o întrebare despre” Ce bază de date folosiți? „
Fiecare RDBMS are propriul mod de a rezolva problema.
Dacă este MySQL, utilizați str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Aceasta va converti un varchar într-o dată și face posibilă sortarea corectă a datei. Sortarea unei date ca tip de date varchar va duce la un comportament neașteptat.
dates
mai degrabă decât șiruri, există un motiv pentru care nu puteți schimba definiția tabelului acum? Sau mai cereți ajutor pentru a face acest lucru?