2009-05-28 5 views
14

Ist es möglich, TRY CATCH-Blöcke in SQL Selects zu verwenden?TRY CATCH auf einem CONVERT in einer Select-Anweisung

Für Material ähnlich wie das zum Beispiel:

select 
    order, 
    CONVERT(DATETIME, orderDate) 
from orders 

Was ist der beste Weg, um dieses Szenarios der Handhabung?

+2

Wenn IsDate wahr ist, auch können Sie es als ein dann werfen Terminzeit. Das ist der Sinn von IsDate. – cjk

+0

@JohnIdol: was meinst du mit "Standard". ISO ist ein Standard für ein Beispiel. Welche Formate gibt es für orderDate? – Sung

+0

Entschuldigung - ich war verwirrt - IsDate ist in Ordnung! – JohnIdol

Antwort

20

Ich weiß nicht, über Try-Catch, aber in SQL Server haben Sie die ISDATE-Funktion und kann es so etwas wie

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END 
+0

funktioniert nicht, wenn orderDate VarChar ist – Cherven

+6

Was ist, wenn das Datumsformat anders ist? – Asher

1

Sie können die Funktion ISDATE() verwenden:

SELECT ISDATE('11/13/2009') 
SELECT ISDATE('13/11/2009') 
2

In der SELECT-Klausel selbst, nein.

Sie können für einen Tag testen obwohl ISDATE mit()

select 
    order, 
    CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END 
from orders 
1

Ich glaube nicht, ein Versuch fängt innerhalb eines ausgewählten möglich ist, aber außerhalb ist möglich, wenn Sie mit gespeicherten Prozeduren arbeiten.

begin try 
    select cast(strartnr as int) from table 
end try 
begin catch 
    select 10000 from table 
end catch