Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verständnisprobleme bei MONTH (https://www.delphipraxis.net/117033-verstaendnisprobleme-bei-month.html)

steppo 10. Jul 2008 10:53

Datenbank: MSSQL • Version: 8.00.194 • Zugriff über: Adoconnection

Verständnisprobleme bei MONTH
 
Hallo Leute,

ich habe ein Verständnisproblem.

Ein normaler select-Befehl sieht wie folgt aus.
Select(anzuzeigende Spalten) from (Tabelle) where (Spalte) = (Wert).

O.K.

Die Syntax von MONTH erwartet als Parameter einen Datumwert(z.B."12.05.2008").

Das ist doch Blödsinn, da ich in diesem Datum den Monat doch sehe! (Na ja, kann ab und zu ganz Hilfreich sein!)

Sinnvoller wäre es doch, wenn ich die Spalte angebe, inder nach diesem Monat gesucht werden soll.

Also in etwa so:

select * from Tabelle where Month(Datum) = 03(März) //Datum ist der Spaltenname in der Tabelle.

Nun, führe ich diesen Befehl im SQL QUERY ANALYSER aus, so bekomme ich mein gewünschtes Ergebnis, obwohl dieser Befehl nicht der Syntax entspricht, oder besser gesagt kein Datum übergeben wird.

Alles andere, damit meine ich eine Datumangabe, muß in den Typ Datetime konvertiert werden.

Anhand welcher Kriterien filtert SQL meine Abfrage? (Wie gesagt das Ergebnis stimmt 100%)

Woher weiß SQL, wo es suchen muß? (Welche Spalte)

Wieso bekomme ich ein richtiges Ergebnis?

Gruß Steppo

mkinzler 10. Jul 2008 11:06

Re: Verständnisprobleme bei MONTH
 
Welchen Typ hat Datum?

steppo 10. Jul 2008 11:10

Re: Verständnisprobleme bei MONTH
 
Hallo mkinzler,

die Spalte Datum hat den Wert DateTime.

mkinzler 10. Jul 2008 11:18

Re: Verständnisprobleme bei MONTH
 
Die MONTH-Funktion extrahiert den Monat aus einem Datumswert (akt. Wert einer Spalte).
In anderen DBMS heisst die funktion auch Extract

SQL-Code:
select Extract( Month from Datum) ...;
Natürlich kann man das auch als Bedingung in der Where-Clause nehmen

steppo 10. Jul 2008 11:31

Re: Verständnisprobleme bei MONTH
 
Was die Function macht weis ich. Meine Frage war, wieso mein Aufruf funktioniert, obwohl kein Datum sondern eine Spalte übergeben wird!

Code:
SELECT MONTH(<date, datetime, >)[
(Original aus SQL)

Bei der eigentlichen Syntax wird auch keine Spalte übergeben, sondern nur aus einem Datumwert der Monat extrahiert.

Mir geht es darum die Fehlerquelle so gering wie möglich zu halten. Da ich die Funtkion nicht standardmäßig verwende, also quasi mißbrauche, wüßte ich gern ob diese Vorgehensweise Gefahren (falsches Ergebnis z.B. bei zweiter Datum-Spalte) birgt.

Gruß Steppo

Sharky 10. Jul 2008 11:32

Re: Verständnisprobleme bei MONTH
 
Zitat:

Zitat von steppo
Was die Function macht weis ich. Meine Frage war, wieso mein Aufruf funktioniert, obwohl kein Datum sondern eine Spalte übergeben wird! ...

Na weil in der Spalte ein Datum steht ;-)

steppo 10. Jul 2008 11:40

Re: Verständnisprobleme bei MONTH
 
Hallo Shraky,

das heißt, auch wenn ich nun eine zweite Datumspalte einfüge, gäbe es keine Probleme!

Sehe ich das richtig?

Gruß Steppo

Sharky 10. Jul 2008 11:48

Re: Verständnisprobleme bei MONTH
 
Zitat:

Zitat von steppo
Hallo Shraky,

das heißt, auch wenn ich nun eine zweite Datumspalte einfüge, gäbe es keine Probleme!

Sehe ich das richtig?

Gruß Steppo

Klar,

entscheidend ist ja welche Spalte Du angibst.

Es ist ja nichts anderes als wenn Du solch eine Abfrage machst
SQL-Code:
SELECT * FROM tabelle where username = 'blubb'
Alle Spalten in denen username = blubb ist
Auch hier gibst Du ja eine Spalte für den Vergleich an. Oder
SQL-Code:
SELECT * FROM tabelle WHERE Month(datum1) = Month(datum2)
Alle Spalten in den der Monat von datum1 gleich dem Monat von datum2 ist

steppo 10. Jul 2008 12:36

Re: Verständnisprobleme bei MONTH
 
Hallo Sharky,

natürlich gebe ich eine Spalte an.

Der Vergleich sieht aber eher so aus:

SQL-Code:
select * from Tabelle where Month(Datum) = 03
Datum ist kein Wert sondern eine SPALTE!

Das heißt, ich übergebe keinen Datumwert, sondern die Spalte wo dieser Wert gesucht werden soll. Der Übergebene Parameter an die Function Month ist also falsch!

Sharky 10. Jul 2008 12:39

Re: Verständnisprobleme bei MONTH
 
Zitat:

Zitat von steppo
... Das heißt, ich übergebe keinen Datumwert, sondern die Spalte wo dieser Wert gesucht werden soll.

Und beim ausführen setzt das DBMS den Wert aus der Spalte ein.

Zitat:

Der Übergebene Parameter an die Function Month ist also falsch!
Nein ist er nicht. Sonst würde es ja nicht funktionieren. Dieses Verhalten ist absolut normal und richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz