¿La forma más rápida de verificar si un carácter es un dígito?

Tengo problemas con la función ISNUMERIC de sqlserver donde está volviendo verdadero para ','

Estoy analizando un código postal y tratando de ver si el segundo carácter (que se supone que es un dígito) es un 0 o no y hago algo diferente en cada caso. El problema es que no puedo simplemente lanzar el personaje marcando isNumeric primero. Aquí está el código para que mi función de valor escalar devuelva el dígito en la segunda ubicación de caracteres, y -1 si no es un dígito.

@declare firstDigit int

IF ISNUMERIC(SUBSTRING(@postal,2,1) AS int) = 1
   set @firstDigit = CAST(SUBSTRING(@postal,2,1) AS int)
ELSE
   set @firstDigit = -1       

RETURN @firstdigit

Dado que esto falla cuando el código postal no es del todo válido. Solo estoy tratando de averiguar cómo verificar si el segundo carácter de nvarchar @postal es un dígito de 0-9. He visto diferentes tipos de soluciones, como usarLIKE [0-9] o usandoPATINDEX etc.

Existe una manera mejor / más fácil de hacer esto, y si no, qué método será el más rápido?

EDIT: Código agregado según la sugerencia de Aaron Bertrand

ON z.postal = 
   CASE
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) = 0 then v.patientPostal
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) > 0 then LEFT(v.patientPostal,3)

Respuestas a la pregunta(3)

Su respuesta a la pregunta