2017-10-19 1 views
2

Ich habe eine Tabelle mit Daten formatiert als Zeichenfolgen in der folgenden Weise YYYY-MM-DD. Die Daten enthalten mehrere Jahre im Wert von Daten und ich würde nur das aktuelle Jahr ziehen, wie die folgende Abfrage verwenden:SQL Server - Where Like-Anweisung mit Variable, die keine Ergebnisse zurückgibt

Declare @currentYear VARCHAR(5) 
Select @currentYear = year(getdate()) 

select * 
from tablename 
where datefixed like @currentYear 

Die Abfrage oben wird keine Ergebnisse zurück. Ich habe versucht, die Methodik in diesem Thema beschrieben: Using variable in SQL LIKE statement

Ich vermisse etwas, aber ich kann nicht meinen Finger darauf legen.

+0

Sie versuchen, wie für Strings für ein Datum verwendet verwendet versuchen Sie zwischen startdate und endDate – RegBes

+3

Wir sollten Hören Sie auf, Fragen zu beantworten, bei denen OP um Hilfe bittet, um ihr unordentliches Datenbankdesign auf Abfrageebene zu beheben. Vielleicht fangen sie dann an, den richtigen Typ zu verwenden. Normalerweise wäre die Abfrage einfach: 'WHERE YEAR (Datumsangabe) = YEAR (GETDATE())' –

+0

Danke @TimSchmelter. Unser neues Design verwendet yyyymmmdd, was die Verwendung von zwischen und einfachen Anweisungen ermöglicht. –

Antwort

3

Sie haben vergessen, die Hinter Wildcard %:

select * 
from tablename 
where datefixed like @currentYear + '%' 
+0

Ich schätze die Hilfe. Das scheint richtig gezogen zu sein. –

2

Sie so etwas wie dieses verwenden:

Declare @currentYear int 
Select @currentYear = year(getdate()) 

select * 
from tablename 
where year(convert(datetime,replace(datefixed,'-',''))) = @currentYear 

Wenn Sie Operator verwenden möchten, können Sie datefixed, um sicherzustellen, muss ein String-Typ (varchar, char etc ..) und fügen Sie einen Platzhalter (%)

+0

Er speichert Zeichenfolgen nicht Datum –

+0

Kann Ausnahme wegen Format 'YYYY-MM-DD' werfen –

+0

Perfektes @MelgoV, dieses funktioniert auch. Wir verwenden derzeit yyyymmdd, mit dem es viel einfacher ist zu arbeiten. –

Verwandte Themen