2017-12-02 1 views
2

Ich studiere SQL (mit MariaDB 10.2) und ich verwende eine riesige Beispieldatenbank, die ich online gefunden habe. Es hat eine "Mitarbeiter" -Tabelle, und diese hat eine "Geburtsdatum" -Spalte vom Typ "Datum". Ich möchte zum Beispiel alle Mitarbeiter auswählen, die älter als 50 Jahre sind, oder diejenigen, die an einem bestimmten Datum 25 Jahre alt sind. Gibt es eine Möglichkeit, so etwas zu tun?SQL nach Datum von heute auswählen

Antwort

4

Sie können interval s zu date s addieren oder subtrahieren:

SELECT * 
FROM employee 
WHERE birth_date <= NOW() - INTERVAL 50 YEAR 
+1

Dies ist der beste Ansatz. Es ist tagesgenau und die Abfrage kann einen Index verwenden. –

0

verwenden

SELECT * FROM myTable WHERE DATE(myDate) = DATE(NOW()) 

Diese für MySql DB ist

+1

Wäre das nicht für alle Angestellten, die heute geboren werden (mit einem Alter von 0)? –

+0

Ok @Roland Ich werde es versuchen. –

2

Unter der Annahme, T-SQL, dann für die über 50 heute verwenden:

select * from employees where datediff(year, birth_date, now()) > 50 

Für diejenigen, die 25 zu einem bestimmten Zeitpunkt Gebrauch sein wird:

select * from employees where datediff(year, birthdate, certain_date) = 25 
+0

Für mich ergibt dies einen Fehler 'DATEDIFF' hat nur 2 Parameter in mysql/mariab: https://mariadb.com/kb/en/library/datediff/. Ich denke, Ihre Abfrage läuft gut in T-SQL :) –

+0

Ja; Es tut mir leid, ich habe nicht angegeben, welche SQL. Ich meinte für t-sql für ms sqlserver. Für mysql würden Sie nicht den ersten Parameter ("Jahr") verwenden und Sie würden immer Ihre Antwort in Tagen bekommen, wenn ich richtig verstehe. – KCCole

0

können Sie INTERVAL Funktion verwenden, die Sie Daten addieren oder subtrahieren kann:

SELECT * FROM employee WHERE birth_date <= (NOW() - INTERVAL 50 YEAR); 
  • NOW() - ---> Present Datum
  • -interval 50 YEAR -----> subtrahieren diesem Zeitpunkt 50 Jahre