sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008 předá datový typ jako parametr pro funkci

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




  1. Nastavit relaci s daty příspěvku

  2. Jak používat textový vstup jako názvy sloupců ve funkci Postgres?

  3. jak mohu vrátit více záznamů databáze ze třídy v programování OOP

  4. postgresql jsonb dotaz bez ohledu na velikost písmen