TRY CATCH auf einem CONVERT in einer Select-Anweisung
Frage
Ist es möglich, TRY CATCH-Blöcke in SQL Selects zu benutzen?
Für Material ähnlich wie das zum Beispiel:
select
order,
CONVERT(DATETIME, orderDate)
from orders
Was ist der beste Weg, um dieses Szenarios des Umgangs mit?
Lösung
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
Andere Tipps
In MS SQL Server 2012 gibt es ein neues Konstrukt, das genau das tut, was gefragt wird:
SELECT
CASE WHEN TRY_CONVERT(float, 'test') IS NULL
THEN 'Cast failed'
ELSE 'Cast succeeded'
END AS Result;
GO
Siehe auch http://msdn.microsoft.com/en-us/library/hh230993.aspx
In der SELECT-Klausel selbst, Nr.
Sie können für einen Tag testen obwohl mit ISDATE ()
select
order,
CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders
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
Sie können die Funktion ISDATE () verwenden:
SELECT ISDATE('11/13/2009')
SELECT ISDATE('13/11/2009')