2017-03-22 3 views
-1

In meinem Tisch INvarchar Datum

ReportingWeek (Date)   eg 2017-03-19 
BookedWeek (nvarchar(12)  eg 07.2017 

habe ich mag Zeilen auszuwählen, wo die BookedWeek in den letzten 17 Wochen.

Muss ich BookedWeek in eine date konvertieren, dann für die letzten 17 Wochen abfragen, oder kann es direkt als nvarchar getan werden?

+1

Markieren Sie Ihre Frage mit der von Ihnen verwendeten Datenbank. –

+1

Welche DBMS verwenden Sie? (Wenn es um Datum/Uhrzeit geht, sind viele Produkte weit entfernt von ANSI SQL-Konformität.) – jarlh

Antwort

-1

Sie brauchen nicht brauchen, um den Wert in ein Datum zu konvertieren. Wenn Sie es als ein Datum behandeln möchten, ist das zumutbar. Dies ist besonders wichtig, wenn Sie es mit "echten" Daten vergleichen möchten.

Ich sollte beachten, dass wenn Sie den Wert als Zeichenfolge speichern möchten, sollten Sie es im Format YYYYWW speichern (YYYY.WW ist in Ordnung). Auf diese Weise können die Werte sortiert und miteinander verglichen werden.

0

Ja, haben Sie Zeichenfolge in Datetime zuerst zu konvertieren, finden Sie in diesem Beispiel:

SELECT * WHERE DATEDIFF(DAY,cast('2017-03-19' AS datetime),GETDATE())<17 
-1

Keine Notwendigkeit bookedweek bisher zu konvertieren. Wir können mit String-Funktionen umgehen. Die folgende Abfrage sollte Ihnen das erwartete Ergebnis auch über das Jahr hinweg geben.

create table #tmp 
(
bookedweek nvarchar(12) 
) 
insert into #tmp values ('07.2017'),('09-2017'),('01.2017'),('50.2016'),('52.2016'),('13.2016'),('48.2016'),('49.2016') 
select * from #tmp 
where (year(getdate())=RIGHT(bookedweek,4) and datepart(week,getdate())- LEFT(bookedweek,2)<17) 
     OR (year(getdate()) - RIGHT(bookedweek,4)=1 and 53 - LEFT(bookedweek,2) + datepart(week,getdate()) < 17) 
drop table #tmp 

Hier ist 53 die Gesamtwochen in einem Kalenderjahr.