2017-01-09 2 views
1

Wie auszuwählen, in dem Tag und Monat zwischen zwei Daten:Sql, wie zu wählen, wo Tag und Monat zwischen zwei Terminen

zum Beispiel: 31/Dezember zwischen 26/Dezember/2016 und 02/Januar/2017

meine Frage:

select table2.* 
from table1, 
    table2 
where table2.day between DAYOFMONTH(table1.date_start) and DAYOFMONTH(table1.date_end) 
    and table2.month between MONTH(table1.date_start) and MONTH(table1.date_end) 

table1 (Reservierung):

-id -date_start (Datum) -date_end (Datum)

1 | 2016-12-26 | 2017-01-02

table2: (Rezept)

id | Name | Tag (int) | Monat (int)

1 | xxx | 31 | 12

+0

Datentyp der Spalte Tag? Markieren Sie die von Ihnen verwendeten dbms. (Einige nicht-ANSI SQL dort.) – jarlh

+0

@a_horse_with_no_name Sieht aus wie MySQL. –

+0

ich Mysql-Datenbank verwenden: tabelle1: -id -date_start (Datum) -date_end (Datum) table2: - id - Tag (int) - Monat (int) – ALWAN

Antwort

1

Es sieht so aus, als ob Sie MySQL verwenden. Anstatt zu versuchen, die Monate und Tage separat zu überprüfen, verwenden Sie einfach BETWEEN mit den zwei Punkten, deren Bereich Sie erfassen möchten.

SELECT t1.* 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.some_col = t2.some_col 
WHERE day_col BETWEEN '2016-12-26' AND '2017-01-02' 

Bitte beachte, dass ich auch eine Join-Bedingung zu Ihrer Anfrage hinzugefügt, ohne die man ein Kreuz verbinden tun, wahrscheinlich nicht das, was Sie beabsichtigen.

+0

Ich habe zwei Spalten day_col und month_col – ALWAN

+0

Tun Sie das nicht! Es macht das Arbeiten mit Ihren Daten sehr schwer. Speichern Sie einfach als "Datetime" und dann sollte meine Antwort funktionieren out of the box. –

+0

JA, tu es nicht, wenn du der Tischdesigner bist. Sie können jedoch die beiden Integer-Werte verwenden, um einen Datumsdatentyp zusammenzustellen und anschließend den Zwischenvergleich zu verwenden. Es gibt viele Möglichkeiten, dies zu tun, aber ohne einen Jahreswert müssen Sie das gleiche Jahr annehmen. – Rawheiser

Verwandte Themen