Cóż, nie ma TRY_CONVERT()
lub TRY_CAST()
w SQL-Server 2008, ale możesz użyć wewnętrznych rzutowań XML na typy dopuszczające wartość null.
Wypróbuj to
DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
,('blah') --bad data
SELECT t.*
,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;
Trochę hack... Ale jakoś pięknie;-)
Niektóre wyjaśnienia
CAST('' AS XML)
to tylko sztuczka, aby uzyskać prawdziwy XML w celu skorzystania z natywnych metod XML. sql:column()
jest XQuery
-funkcja, która pozwala na dołączenie kolumny zestawu do XQuery
(użyj sql:variable
dla zmiennych).
cast as xs:int?
spróbuje przeanalizować ciąg jako wartość typu int i zwróci NULL, jeśli to nie zadziała.
Limit jest następujący:to zawsze użyje ustawień domyślnych twojego systemu (podobnie do TRY_CAST
). Z TRY_CONVERT
miałbyś większą kontrolę nad wyjściem z trzecim parametrem...
Podpowiedź:XQuery/Xpath
jest ściśle rozróżniana wielkość liter. Więc jest xs:dateTime?
, ale otrzymasz błąd z xs:datetime
...