CONVERTIR SQL Server (NUMERIC (18,0), '') falla pero CONVERT (INT, '') tiene éxito?

PRINT CONVERT(NUMERIC(18,0), '')

produce Error converting data type varchar to numeric.

Sin embargo,

PRINT CONVERT(INT, '')

produce 0 sin error …

Pregunta: ¿Hay algún indicador de SQL Server para esto o tendré que hacer las declaraciones de caso para cada conversión de varchar a numérica? (aparte de lo obvio ¿por qué?)

Use ISNUMERIC

 declare @a varchar(20) set @a = 'notanumber' select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end 

ISNUMERIC no siempre funciona como cabría esperar: en particular, devuelve True para algunos valores que posteriormente no pueden convertirse en numéricos.

Este artículo describe el problema y sugiere cómo solucionarlo con UDF.

La cadena vacía se convertirá a cero para los types float e int, pero no para los decimales. (Y se convierte al 01 de enero de 1900 para datetimes = zero). No sé por qué … simplemente es …

Si necesita un decimal (18,0), use bigint en su lugar. O lanzar por flotación primero

ISNUMERIC aceptará - y . y 1.2E3 como un número, pero todos no pueden convertirse a decimal.

Intereting Posts