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

Hvorfor returnerer ISNUMERIC('.') 1?

Se IsNumeric() Broken? Kun op til et punkt.

SELECT CAST('.' AS MONEY) 

returnerer 0.00 (selvom castet mislykkes for int og float )

ISNUMERIC kontrollerer bare, at værdien kan castes til enhver af de numeriske datatyper, hvilket generelt er ubrugeligt. Normalt vil du gerne vide, om den kan støbes til en bestemt type.

Derudover ser det ikke engang ud til at udføre denne opgave korrekt for alle mulige input.. ISNUMERIC(' ') returnerer 0 trods casting med succes til både int og penge. Omvendt ISNUMERIC(N'8') returnerer 1 men kaster ikke med succes til noget, jeg prøvede.

Nogle nyttige hjælpefunktioner til det er her IsNumeric, IsInt, IsNumber.

SQL Server 2012 introducerede TRY_PARSE og TRY_CONVERT der hjælper meget med dette.



  1. Forstå deadlocks i MySQL og PostgreSQL

  2. Venstre polstring i SQL Server – 3 LPAD()-ækvivalenter

  3. FEJL:tilladelse nægtet til relationstabelnavn på Postgres, mens du prøvede en SELECT som skrivebeskyttet bruger

  4. Hvad virtuelle filstater gør, og ikke gør, fortæller dig om I/O-forsinkelse