2017-11-20 3 views
0

Ich habe eine Tabelle mit Jahr und Monat Felder. Ich muss die Zeilen zwischen zwei bestimmten Daten auswählen. Wie stelle ich dies in der Where-Bedingung ein? enter image description hereSQL-Abfrage, um Ergebnis für einen Datumsbereich zu erhalten, wenn Tabelle Jahr und Monat Felder

+0

Bearbeiten Sie Ihre Frage und liefern Beispieldaten, die gewünschten Ergebnisse, und ein Tag für die von Ihnen verwendete Datenbank –

+1

Etwas wie '... where yearcol * 100 + monatecol zwischen 201601 und 201612' – jarlh

+1

Welches [DBMS] (https://en.wikipedia.org/wiki/DBMS) Produkt verwenden Sie? Postgres? Orakel? "_SQL_" ist nur eine Abfragesprache, nicht der Name eines bestimmten Datenbankprodukts. –

Antwort

-2

Versuchen Sie mit "Between".

Etwas wie folgt aus:

SELECT SALES_AMOUNT FROM Tabelle WHERE YEAR zwischen 2015 und 2016 und Monat zwischen 6 und 8

3

Sie ein wenig unklar sind auf das, was "zwischen" bedeutet in diesem Zusammenhang. Ich bin mir ziemlich sicher, dass datefromparts() kann sehr hilfreich sein:

select t.* 
from t 
where @date_start <= datefromparts(year, month, 1) and 
     @date_end >= datefromparts(year, month, 1); 

Sie könnten auch eomonth() hilfreich, wenn das Ende des Monats ein wichtiges Datum ist.

+0

Nizza :) Aber ich denke, es ist nur in SQL Server 2012 ab – Grantly

+0

@Grantly verfügbar. . . Nun, ja, und diese Software ist seit über 5 Jahren draußen. –

+0

LOL Ja, ich bin so hinter diesen Tagen. Ich habe es nur erwähnt, falls jemand Schwierigkeiten hatte, diese Funktion zu benutzen, wie ich. Ich habe viele Versionen laufen, aber immer noch nicht bis 2012,2014 (Obwohl einige meiner Kunden sind) – Grantly

0

Sie mit Hilfe Monat versuchen können(), Jahr() Funktion Datum

Hier ist das Beispiel:

select * from t, wobei (t.month = Monat ('2017-01 -01 ') und t.year = Jahr (' 2017-01-01 ')) und (t.month = Monat (' 2017-05-01 ') und t.year = Jahr (' 2017-05-01 '));

Unten ist der Link für Monat() in Sql. https://docs.microsoft.com/en-us/sql/t-sql/functions/month-transact-sql

Dies könnte Ihnen bei der Lösung Ihres Problems helfen.

+0

Ziemlich sicher, das Problem erfordert ein Ergebnis zwischen zwei Daten, nicht gleich zwei Termine - die aussieht, als ob es sowieso nicht funktionieren würde ... Aber schöner Versuch. Vielleicht können Sie Ihre Antwort verbessern? – Grantly

0

können Sie auch versuchen, so etwas wie:

select 
    d.* 
from 
    (select 
    t.*, 
    cast(rtrim(cast([month] as char(2))) + '/1/' + cast ([year] as char(4)) as date) as dt) d 
where 
dt >= @dateStart and 
dt <= @dateEnd 
0

Wenn die Jahres- und Monatswerte ganze Zahlen sind, können Sie sie zu gieße VARCHAR-, dann das Datum und die Verwendung zwischen. Ein Beispiel mit startdate deklarieren und endDate Variablen:

DECLARE @startdate date = '2015-07-01' 
     ,@enddate date = '2016-07-01' 

SELECT *  
    FROM @myTable 
WHERE CAST(CAST(Year as varchar) + '-' + CAST(Month as varchar) + '-01' as date) 
     BETWEEN @startdate AND @enddate 

Wenn sie Zeichen sind oder Varchars Sie müssen werfen nur auf dem neuesten Stand und können Sie zwischen:

DECLARE @startdate date = '2015-07-01' 
     ,@enddate date = '2016-07-01' 

SELECT *  
    FROM @myTable 
WHERE CAST(Year + '-' + Month + '-01' as date) 
     BETWEEN @startdate AND @enddate 
Verwandte Themen