2017-03-23 1 views
0

Ich möchte eine Funktion erstellen, um es bei der Erstellung der Ansicht zu verwenden. In meiner Tabelle gibt es Strings (Strings bestehen nur aus 8 Ziffern), die ich in DATE umwandeln.Erstellen Sybase-Funktion mit Ausnahmebehandlung

Meine Funktion ist:

CREATE FUNCTION MY.FUNCTION(@date int) 
    RETURNS DATE 
AS 
BEGIN 
    RETURN CONVERT(DATETIME, @date) 
END 

Wenn ich smth wie SELECT FUNCTION('20170323') FROM TABLE es wie erwartet funktioniert. Aber wenn ich smth wie SELECT FUNCTION('77777777') FROM TABLE versuchen werde, scheitert es natürlich ... Aber wenn es scheitert, muss ich NULL reut! Nach etwas graben habe ich kein Ergebnis über Funktionsänderung. Wie Ausnahmebehandlung in meiner Funktion ordnungsgemäß hinzugefügt, um Datum auf NULL zurückzugeben, wenn es fehlschlägt?

+0

DB ist: ASE 15.7 – Alex13ss

+0

oh, bemerkte nicht das RDBMS, meins ist für sql server .. – LONG

Antwort

0

Nach einer langen Untersuchung und vielen Bemühungen Ich habe meine Lösung gefunden:

CREATE FUNCTION MY_FUNCTION(@date CHAR(20)) 
    RETURNS DATE 
AS 
BEGIN 
RETURN 
(CASE 
    WHEN ISDATE(@date) = 0 
    THEN NULL 
    ELSE CAST(@date AS DATE) 
END) 
END 

Sybase-Methode ISDATE() macht in diesem Fall alle Magie, ohne Ausnahme zu werfen ...

0

Verwendung TRY_CONVERT statt CONVERT, das wäre:

CREATE FUNCTION TEST(@date varchar(50)) 
    RETURNS DATETIME 
AS 
BEGIN 
    RETURN TRY_CONVERT(DATETIME, @date) 
END 

Ergebnis:

select [dbo].[TEST]('20171201') --output:2017-12-01 00:00:00.000 
select [dbo].[TEST]('9999999999') --output: NULL 
+0

Ich empfehle, die 1. Methode zu verwenden, die die vorhandene eingebaute Funktion ist, 'NULL' zurückzugeben, wenn Konvertierung fehlgeschlagen – LONG

+0

1 Methode : "Ungültiger Spaltenname" DATETIME " 2 Methode: Ausprobiert, bevor die Frage gestellt wird ..." Falsche Syntax nahe 'TRY' " – Alex13ss

+0

1 -" Ungültige SELECT-Anweisung innerhalb einer skalaren SQL-Funktion " – Alex13ss