Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich danke schonmal im voraus an alle helfenden.

Folgendes Problem:

Das ist meine FUnktion


ALTER FUNCTION dbo.VZA_FORMATDATE (@datum AS DATETIME, @str as varchar(254)

)

RETURNS VARCHAR(254) AS


BEGIN

 	DECLARE @out as varchar(254)

    if @str = 'YYYY'

    set @out = convert(varchar(4), @datum, 112)

    if @str = 'MM'

    set @out = CONVERT(varchar(2), @datum, 10)

    if @str = 'YYYYMM'

    set @out = convert(varchar(6), @datum, 112)

    return @out


END

Den FUnktionsaufruf habe ich mir so vorgestellt.

dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')

Das Problem ist das meine Funktion nicht auf 'Zaehldatum' zugreifen kann. Die Funktion erwartet einen manuel eingegebenes Datum für die Variable @datum.

Ich will aber das sich die Funktion das datum selber aus einer spalte nimmt die ich ihm vorgebe.

Verbesserungsvorschläge nehme ich gerne für meine Funktion an^^

Ich bin in MSSQL noch ein anfänger habe mich erst seit 2 wochen da eingearbeitet:D

Geschrieben

Du bist schon auf dem richtigen Weg. Deine Funktion kann in deinem Beispiel doch nur nicht wissen woher sie Zaehldatum nehmen soll.

Versuch mal etwas in der Richtung von:

SELECT Spalte1, Spalte2, dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY') from MyTable

Goos

Geschrieben

Danke erstmal für die schnelle Antwort. Ich teile meiner Funktion schon mit woher er die daten kriegt. Ich habe eine Sicht geschrieben in der meine Funktion aufgerufen wird, aber leider kommt immer beim ausführen die Fehlermeldung ungültig spaltenname 'Jahr', 'Monat' usw. also praktisch dort wo meine Funktion aufgerufgen wird entstehen die Fehler.


CREATE VIEW QBSUMMENMONAT_2

(

  VONKNOTENNR,

  NACHKNOTENNR,

  JAHR,

  MONAT,

  JAHRMONAT,

  TBLARTNR,

  SORTER,

  SORTEROHNEART

)

AS

SELECT 

   VonKnotenNr, 

   NachKnotenNr,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) AS JAHR,   -- hier wird dann die erste funktion aufgerufen und in Jahr gespeichert

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) AS MONAT,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')) AS JAHRMONAT,

   tblArtNr, 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) AS Sorter, 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) AS SorterOhneArt

FROM

   tblStreckenSummeTag

GROUP BY 

   VonKnotenNr, 

   NachKnotenNr, 

   JAHR,                --hier kommt dann die fehlermeldung ungültige spaltenname und für die nächsten SPalten auch

   MONAT,

   JAHRMONAT,

   tblArtNr,

   Sorter,

   SorterOhneArt;

Ich scheiter gerade nur an diesem view alles andere funktioniert einwandfrei soweit ich das sehe^^

Geschrieben

Nu schaem dich erstmal dafuer, dass du im ersten Post nicht dein Problem geschildert hast. Wenn du schon meinst, du wuesstest in welche Richtung es geht, dann kann man damit oftmals recht wenig anfangen ;)

Dein Problem ist die Abarbeitungsreihenfolge des Querys

Hier nachzulesen

Das Group by wird vor dem select angewandt, was erklaert wieso das Alias welches du im Select vergibst nicht schon im Group by bekannt ist.

Das heisst dann fuer dich, dass du deine Funktionen im Group by nochmals aufrufen musst.

Goos

Geschrieben

HI

ich muss ja schon sagen du antwortest in rekordzeit:D

wenn ich dich richtig verstanden habe müsste meine Order By Klausel folgendermaßen aussehen:


GROUP BY 

   VonKnotenNr, 

   NachKnotenNr, 

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) ,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) ,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')),

   tblArtNr,

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) , 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) ;


Ich habs ausprobiert. Ich kriege jetzt keine Fehlermeldung, aber du kennst das sicher keine Fehlermeldung heißt ja nicht das es keine fehler gibt^^

Ich muss erstmal die Datenbank austesten, ob alles so funktioniert wie es sein soll. Ich danke dir VIELMALS für deien Hilfe du hast mich viel weiter gebracht.

:uli

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...