Nå, der er ingen TRY_CONVERT()
eller TRY_CAST()
i SQL-Server 2008, men du kan bruge XML's interne casts til nullbare typer.
Prøv dette
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;
Lidt af et hack... Men på en eller anden måde smukt;-)
Nogle forklaring
CAST('' AS XML)
er bare et trick for at få en rigtig XML for at få brug af XMLs native metoder. sql:column()
er en XQuery
-funktion, som giver dig mulighed for at inkludere et sæts kolonne i XQuery
(brug sql:variable
for variabler).
cast as xs:int?
vil prøve at parse strengen som int-værdi og vil returnere NULL, hvis dette ikke virker.
Grænsen er:Dette vil altid bruge dit systems standardindstillinger (svarende til TRY_CAST
). Med TRY_CONVERT
du ville have mere kontrol over outputtet med den tredje parameter...
Tip:XQuery/Xpath
er strengt skelet mellem store og små bogstaver. Så der er xs:dateTime?
, men du får en fejl med xs:datetime
...