MS SQL: Zwei numeric-Felder in neuem Feld verbinden
Hallo zusammen,
ich melde mich einmal mit einer wahrscheinlich sehr einfachen Sache, bei der ich jedoch gerade etwas hänge...
Es geht um folgendes:
Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)
Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Nur als kleine Info, wofür ich das brauche - mir ist nur dieser Lösungsweg auf die Schnelle eingefallen.
Falls ich hiermit jedoch auf dem Holzweg bin, gerne auch andere Tipps - bin wahrlich kein SQL-Experte, möchte das aber gerne lösen und etwas dazulernen.
Wäre sehr dankbar, wenn mich hier jemand in die richtige Bahn lenken könnte.
Besten Dank!
ich melde mich einmal mit einer wahrscheinlich sehr einfachen Sache, bei der ich jedoch gerade etwas hänge...
Es geht um folgendes:
Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)
Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Nur als kleine Info, wofür ich das brauche - mir ist nur dieser Lösungsweg auf die Schnelle eingefallen.
Falls ich hiermit jedoch auf dem Holzweg bin, gerne auch andere Tipps - bin wahrlich kein SQL-Experte, möchte das aber gerne lösen und etwas dazulernen.
Wäre sehr dankbar, wenn mich hier jemand in die richtige Bahn lenken könnte.
Besten Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 299895
Url: https://administrator.de/forum/ms-sql-zwei-numeric-felder-in-neuem-feld-verbinden-299895.html
Ausgedruckt am: 26.12.2024 um 02:12 Uhr
9 Kommentare
Neuester Kommentar
Hi,
alternativ zum Vorschlag von @114757 könntest du auch mit DATEFROMPARTS() aus Monat und Jahr ein Datum erstellen lassen.
Damit könntest du evtl. auftretende Sortierprobleme vermeiden. (Alphanumerische Sortierung vs. numerische Sortierung / Sortierung nach Datum)
https://msdn.microsoft.com/de-de/library/hh213228(v=sql.120).aspx
Beste Grüße!
Berthold
alternativ zum Vorschlag von @114757 könntest du auch mit DATEFROMPARTS() aus Monat und Jahr ein Datum erstellen lassen.
Damit könntest du evtl. auftretende Sortierprobleme vermeiden. (Alphanumerische Sortierung vs. numerische Sortierung / Sortierung nach Datum)
https://msdn.microsoft.com/de-de/library/hh213228(v=sql.120).aspx
Beste Grüße!
Berthold
Moin bluejet,
Wenn du ein künstliches (Text-)Feld so wie skizziert erzeugst, dann bekommst du bei einen Kleiner/größer/between ganz unsinnige ergebnisse.
Bzw. in dem angegebenen Vergleich einen leeren Resultset.
Denn kein datensatz kann die Bedingung "größer als Text '9.2015'" und gleichzeitig "kleiner als text '1.2016'" erfüllen.
Also, WENN du unbedingt ein künstliches Feld im View anlegen möchtest zu Forschungs- und Weiterbildungszwecken, dann ind der Art
Hier wird benutzt:
Aber ich finde den Nutzen dieses Zusatzfeldes eher gering.
ich würde direkt auf
Grüße
Biber
[Edit] Upps, BirdyB war schneller. [/Edit]
Zitat von @Bluejet:
Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)
Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Ganz schlechter Plan.Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)
Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Wenn du ein künstliches (Text-)Feld so wie skizziert erzeugst, dann bekommst du bei einen Kleiner/größer/between ganz unsinnige ergebnisse.
Bzw. in dem angegebenen Vergleich einen leeren Resultset.
Denn kein datensatz kann die Bedingung "größer als Text '9.2015'" und gleichzeitig "kleiner als text '1.2016'" erfüllen.
Also, WENN du unbedingt ein künstliches Feld im View anlegen möchtest zu Forschungs- und Weiterbildungszwecken, dann ind der Art
CREATE view whatever as
SELECT monat, jahr
, convert(char(8), DateFromParts( jahr, monat, 1), 112) as DateAsIso --yyyymmdd
FROM deineTable
DateFromParts(2015, 9, 1)
--> liefert einen Datumswert 01.09.2015Convert( char(8), datumswert, 112)
macht ein Datum zum String im Format YYYYMMTTAber ich finde den Nutzen dieses Zusatzfeldes eher gering.
ich würde direkt auf
jahr
und monat
vergleichen.Grüße
Biber
[Edit] Upps, BirdyB war schneller. [/Edit]
Wo ist eigentlich jodels Beitrag geblieben?
@Biber: Hunger gehabt?
@Biber: Hunger gehabt?
[OT]
Moin BirdyB,
Ich war es nicht... war genauso verblüfft wie Du.
Wollte nämlich auch mal nachlesen, auf welchen Link er verwiesen hatte.
Hm, vielleicht taucht er ja unter dem Nick houdini32 wieder auf ganz plötzlich...
Grüße
Biber
[/OT]
Moin BirdyB,
Ich war es nicht... war genauso verblüfft wie Du.
Wollte nämlich auch mal nachlesen, auf welchen Link er verwiesen hatte.
Hm, vielleicht taucht er ja unter dem Nick houdini32 wieder auf ganz plötzlich...
Grüße
Biber
[/OT]
Hallo Bluejet,
mit DateFromParts() baust du dir ja ein Datumsfeld. Daher würde ich einfach die entsprechende View bauen und damit die Abfrage gestalten.
Alternativ
(Monat > 9 AND Jahr =2015) OR (Monat < 3 AND Jahr = 2016)
wäre jetzt mal eine Idee (habs nicht getestet)
Beste Grüße!
Berthold
mit DateFromParts() baust du dir ja ein Datumsfeld. Daher würde ich einfach die entsprechende View bauen und damit die Abfrage gestalten.
Alternativ
(Monat > 9 AND Jahr =2015) OR (Monat < 3 AND Jahr = 2016)
wäre jetzt mal eine Idee (habs nicht getestet)
Beste Grüße!
Berthold
Moin bluejet,
wo genau ist das Problem.
Wie würdest du denn diese Einschränkung im Umgangs-Deutsch formulieren?
[Raum für deine Notizen]
[/Raum für deine Notizen]
Im SQL, was sich ja nix anderes ist als stilisiertes Umgangsdenglisch läuft es exakt genauso:
Grüße
Biber
wo genau ist das Problem.
Wie würdest du denn diese Einschränkung im Umgangs-Deutsch formulieren?
[Raum für deine Notizen]
[/Raum für deine Notizen]
Im SQL, was sich ja nix anderes ist als stilisiertes Umgangsdenglisch läuft es exakt genauso:
SELECT Rechnungsnummer, Monat, Jahr
WHERE (jahr =2015 AND monat >=9)
OR (jahr =2016 AND monat <= 3)
Grüße
Biber
@Biber hat recht. Vergiss meinen Vorschlag... (Ich leide noch unter den Nachwirkungen des Nachtdienstes...)