Cum se compară datele în SQL?

Într-un tabel de baze de date am creat un atribut date, dar i-am setat tipul la varchar și nu 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:

dd / mm / 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"; 

„data” arată astfel: 07/08/2015 15:15:02

Aș aprecia un exemplu despre cum pentru a face acest lucru.

Comentarii

  • Vă rugăm să editați și etichetați întrebarea dvs. pentru a ne spune ce produs din baza de date utilizați (de ex. MySQL și versiunea). De asemenea, întrucât este aproape întotdeauna mai bine să stocați datele ca 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?
  • Puteți schimba atributul de dată la datetime? Stocarea datelor ca varchar este problematică. Veți întâlni situații în care sunt stocate date care nu sunt o dată validă. De asemenea, veți face conversii continue la și de la data și ora.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *