我遇到了 sqlserver 的 ISNUMERIC 函数的问题,它为 ',' 返回 true
我正在解析邮政编码并尝试查看第二个字符(应该是数字)是否为 0,并在每种情况下执行不同的操作。问题是我不能通过首先检查 isNumeric 来转换字符。这是我的标量值函数的代码,用于返回第二个字符位置中的数字,如果不是数字,则返回 -1。
@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
因为当邮政编码不太有效时,这会失败。我只是想知道如何检查 nvarchar @postal 的第二个字符是否是 0-9 之间的数字。我见过不同类型的解决方案,例如使用LIKE [0-9]
或使用PATINDEX
等。
有没有更好/更简单的方法来做到这一点,如果没有,哪种方法最快?
编辑:根据 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)