PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MSSQL ISDATE Funktion


Matrix316
2021-02-10, 21:19:51
Kann mir jemand erklären, warum ich hier zwei mal True bekomme?

https://abload.de/img/isdate5jjrl.jpg (https://abload.de/image.php?img=isdate5jjrl.jpg)

Ich dachte englisches Format wäre Tag Monat Jahr und nicht Monat Tag Jahr...

:confused:

Sephiroth
2021-02-10, 22:16:19
welches DATEFORMAT ist aktiv? was passiert wenn du beim 2. auch das DATEFORMAT mit
set DATEFORMAT dmy;
setzt?

Matrix316
2021-02-10, 22:45:29
Komische Ergebnisse:

https://abload.de/img/dmy1ik3v.jpg (https://abload.de/image.php?img=dmy1ik3v.jpg)

https://abload.de/img/dmy13cjna.jpg (https://abload.de/image.php?img=dmy13cjna.jpg)

Nur der macht sinn:

https://abload.de/img/ymdggjpz.jpg (https://abload.de/image.php?img=ymdggjpz.jpg)

Aber die Language hat hier keinen Einfluss glaube ich.

Sind die Settings eigentlich dann global für immer, wenn man das setzt oder nur für die Session?

Gast
2021-02-10, 22:55:55
Schau mal in "sys.syslanguages" nach; dort findest du pro Sprache auch das Datumsformat. Dies erklärt es vielleicht.

Matrix316
2021-02-11, 09:30:43
Hmmm, nicht ganz.

Da steht german = dmy

Aber

set language german
set dateformat dmy
select ISDATE('2020-12-27')

Ergibt false

Und das hier

set language german
set dateformat dmy
select ISDATE('2020-27-12')

Ergibt True - was eigentlich genauso wenig Sinn macht, weil eigentlich sollte dann nur das:

select ISDATE('27-12-2020')

true ergeben - was es auch macht. ;)

Aber sollte ISDATE nicht automatisch das Datumsformat erkennen??? Gerade wenn ich das Jahr mit 4 Stellen angebe?

Gast
2021-02-11, 22:30:46
Die ISDATE-Funktion arbeitet mind. zweistufig. Zuerst wird der String gegen das dateformat geprüft. Wenn das "false" ergibt, läuft noch eine weitere Prüfung gegen die Standard-Einstellung. Ich habe aber noch nicht ganz begriffen, was "Standart" hier bedeutet. Ist es die Sprache, die du bspw. per "SET LANGUAGE" ändern kannst, oder ist es die Sprache des Clients, oder vom OS ...

Die komplette automatische Erkennung ist nicht möglich, da Monat und Tag nicht immer eindeutig unterscheidbar sind; siehe '2020-02-01'.

Haarmann
2021-02-13, 15:08:46
Gast

Dürfte mit der Spracheinstellung zusammenhängen, die ja wählst, wenn die Instanz installierst.

Picknatari
2021-02-14, 02:14:18
Ist das Jahr vierstellig, erwartet die Funktion nur die Plausabilität von Monat und Tag, da das Jahr eindeutig ist. Mach das Jahr zweistellig und du bekommst, was Deiner Denke entspricht (hab ich nicht probiert, sollte aber so sein).

Matrix316
2021-02-14, 21:34:33
Die ISDATE-Funktion arbeitet mind. zweistufig. Zuerst wird der String gegen das dateformat geprüft. Wenn das "false" ergibt, läuft noch eine weitere Prüfung gegen die Standard-Einstellung. Ich habe aber noch nicht ganz begriffen, was "Standart" hier bedeutet. Ist es die Sprache, die du bspw. per "SET LANGUAGE" ändern kannst, oder ist es die Sprache des Clients, oder vom OS ...

Die komplette automatische Erkennung ist nicht möglich, da Monat und Tag nicht immer eindeutig unterscheidbar sind; siehe '2020-02-01'.

Ja wobei 2020-02-01 ist ein Datum, aber 2020-01-02 ist auch ein Datum. 2020-27-12 ist auch ein Datum, genauso 2020-12-27. Kein Datum wäre 2020-03-34 oder 2020-70-23. Das kann man ja schon erkennen.

Ok vielleicht mach ich für mein Szenario eine eigene Isdate Funktion... :uponder: