Frank (no reg): SQL-Query mit Fallunterscheidungen

Beitrag lesen

Hi,

mir fehlt gerade etwas das Einfühlungsvermögen. Könntest du mal ein Datenbeispiel (Input und gewünschter Output) mit diesem Schuljahrbeginn geben?

SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 112),5, 4) < '0201'

Wenn Substring nun mal (theoretischerweise) '201' ergibt, dann geht die Verzweigung nicht mehr so gut auf. Es ist ungeeignet Datumsangaben als (Teil)Strings miteinander zu vergleichen. Nutze dazu besser die Funktionen wie DAY, MONTH, YEAR, DATEPART usw

Wir haben heute den 4.10., das ist grösser als 1.8. weil der Monat grösser ist, oder. D.h. du könntest jetzt einfach das nächste Schulhalbjahrbeginndatum ermitteln:

  
-- @newDate ist eine Variable  
DECLARE @newDate datetime  
SELECT @newDate =  
  CASE  
  WHEN MONTH(GETDATE()) > 8  
  THEN CONVERT(datetime,  
               CAST((YEAR(GETDATE()) + 1) as varchar(4)) + '-02-01',  
               120)  
  ELSE CONVERT(datetime,  
               CAST(YEAR(GETDATE()) as varchar(4)) + '-08-01',  
               120)  
  END  

Statt GETDATE() kannst du natürlich auch die ende oder ende_korr oder COALESCE(ende_korr, ende) einsetzen. Und irgendwie müsstest du auch noch ermitteln ob das ende in der Zukunft liegt, was aber relativ trivial ausfallen dürfte.

Cheers, Frank