sql >> Databasteknik >  >> Database Tools >> SSMS

SQL Server ISNUMERIC() förtydligande

Du bör använda CAST() eller TRY_CAST() istället:

declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure

Det är också viktigt att påpeka ISNUMERIC() är inte perfekt. Från dokumenten :

ISNUMERIC returnerar 1 för vissa tecken som inte är siffror, som plus (+), minus (-) och giltiga valutasymboler som dollartecknet ($). För en komplett lista över valutasymboler, se pengar och småpengar (Transact-SQL).

Av denna anledning tror jag inte att den logiska kontrollen är av värde här. Bäst att använda TRY_CAST() på alla värden, oavsett förekomsten av tecken och hantera nollsvaret på ett förutsägbart sätt.



  1. SSMS utbyggbarhet/tillägg - få aktuell databas och server

  2. Hur begränsar jag åtkomst till phpmyadmin?

  3. Inga UI-dialoger i MS Azure / SQL Server Management Studio

  4. Skapar JSON-tabell från SQL-fråga