Tidak ada TRY_CONVERT()
atau TRY_CAST()
di SQL-Server 2008, tetapi Anda dapat menggunakan gips internal XML ke tipe nullable.
Coba ini
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;
Sedikit hack... Tapi entah kenapa cantik;-)
Beberapa penjelasan
CAST('' AS XML)
hanyalah trik untuk mendapatkan XML asli untuk mendapatkan penggunaan metode asli XML. sql:column()
adalah XQuery
-fungsi, yang memungkinkan Anda untuk memasukkan kolom set ke dalam XQuery
(gunakan sql:variable
untuk variabel).
cast as xs:int?
akan mencoba mengurai string sebagai nilai int dan akan mengembalikan NULL jika ini tidak berhasil.
Batasannya adalah:Ini akan selalu menggunakan default sistem Anda (mirip dengan TRY_CAST
). Dengan TRY_CONVERT
Anda akan memiliki kontrol lebih besar atas output dengan parameter ketiga...
Petunjuk:XQuery/Xpath
sangat peka huruf besar-kecil. Jadi ada xs:dateTime?
, tetapi Anda akan mendapatkan kesalahan dengan xs:datetime
...