Announcement

Collapse
No announcement yet.

DATEDIFF, Tage bis Geburtstag

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DATEDIFF, Tage bis Geburtstag

    hallo zusammen,

    ich habe vor einiger zeit von Access zu MS SQL Server Express migriert.
    momentan erstelle ich sämtliche abfragen neu und komme bei einer sache einfach nicht weiter.

    es geht darum dass ich in einer abfrage (view) mir die noch verbleibenden tage bis zum geburtstag von XY anzeigen lassen möchte. in access habe ich das mit datediff und format realisiert, im sql server so nicht möglich.

    vielleicht kann mir jemand auf die sprünge helfen wie das in T-SQL zu handhaben ist.

    es geht also eigentlich darum datediff zu berechnen ohne das jahr (yyyy). also nur dd.mm. sodass ich die differenz innerhalb dieses jahres erhalte.

    für hilfe bin ich dankbar.

    grüße
    hannes

  • #2
    Ist direkt in einem SELECT etwas lange:
    Code:
    declare @geburtstag as datetime
    set @geburtstag = '02.01.1958'
    select 
    case when substring(CONVERT(char(8), @geburtstag, 112), 5, 4) >= substring(CONVERT(char(8), GETDATE(), 112), 5, 4) then
    datediff(dd, getdate(), convert(datetime, cast(year(getdate()) as char(4)) + substring(CONVERT(char(8), @geburtstag, 112), 5, 4)))
    else 
    datediff(dd, getdate(), convert(datetime, cast(year(getdate()) + 1 as char(4)) + substring(CONVERT(char(8), @geburtstag, 112), 5, 4)))
    end
    Die zweite Variable wäre, das als UDF (User defined function) anzulegen:
    Code:
    create FUNCTION TageBisZumGeburtstag
    (
      @geburtstag  datetime
    )
    RETURNS int
    AS
    BEGIN
     declare
       @jahr            int,
       @mmtt_geburtstag char(4),
       @mmtt_heute      char(4)
    
     select @jahr = YEAR(getdate())
     select @mmtt_geburtstag = substring(CONVERT(char(8), @geburtstag, 112), 5, 4)
     select @mmtt_heute = substring(CONVERT(char(8), getdate(), 112), 5, 4)
     if @mmtt_geburtstag < @mmtt_heute set @jahr = @jahr + 1
    
     return(select DATEDIFF(d, getdate(), convert(datetime, cast(@jahr as varchar) + @mmtt_geburtstag)))
    
    END
    GO
    ... den Wert kriegt man in diesem Fall so:
    select dbo.TageBisZumGeburtstag(@geburtstag)

    bye,
    Helmut

    Comment


    • #3
      vielen dank

      hallo helmut,

      über select funktioniert es einwandfrei, vielen dank!

      mit funktionen habe ich mich noch nicht vertraut gemacht, werde dies aber demnächst in angriff nehmen.

      danke und grüße
      hannes

      Comment

      Working...
      X