No, neexistuje žádný TRY_CONVERT()
nebo TRY_CAST()
v SQL-Server 2008, ale můžete použít interní přetypování XML na typy s možnou hodnotou Null.
Zkuste toto
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;
Trochu hack... Ale nějak krásně;-)
Nějaké vysvětlení
CAST('' AS XML)
je jen trik, jak získat skutečný XML za účelem využití nativních metod XML. sql:column()
je XQuery
-funkce, která umožňuje zahrnout sloupec sady do XQuery
(použijte sql:variable
pro proměnné).
cast as xs:int?
se pokusí analyzovat řetězec jako int-value a vrátí NULL, pokud to nebude fungovat.
Limit je:Toto bude vždy používat výchozí nastavení vašeho systému (podobně jako TRY_CAST
). Pomocí TRY_CONVERT
budete mít větší kontrolu nad výstupem s třetím parametrem...
Nápověda:XQuery/Xpath
přísně rozlišuje velká a malá písmena. Existuje tedy xs:dateTime?
, ale zobrazí se chyba s xs:datetime
...