sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2008 sender datatype som parameter for funktion

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 ...




  1. parsing af brugerskrevne fuldtekstsøgningsforespørgsler ind i WHERE-klausulen i MySQL ved hjælp af PHP

  2. Oracle PL/SQL:bloker parallel udførelse

  3. Find afstanden mellem to punkter ved hjælp af bredde- og længdegrad i mysql

  4. Hvordan man laver Mysql JDBC-driver til android studio