检查一个varchar是否为数字(T-SQL)

74

有没有一种简单的方法来确定一个varchar是否为数字?

示例:

abc123 --> 不是数字

123 --> 是数字


4
"Isnumeric"函数存在很多怪异的问题(参见 https://connect.microsoft.com/SQLServer/feedback/details/302466/isnumeric-returns-true-for-and)。 - Martin Smith
1
我在上方添加了一个链接,其中包含一些示例和微软的解释。您需要匹配哪些数字格式?例如,您是否需要匹配类似于“1e23”的内容? - Martin Smith
在处理 IsNumeric 的怪异情况时,考虑使用 TRY_CAST(ReqCol As INT) IS NOT NULL 如何? - Sai
1
请接受达米恩的答案。 - greg121
12个回答

0

如果您想在字段上添加约束:

固定长度的正整数

ALTER TABLE dbo.BankBranchType  
ADD CONSTRAINT CK_TransitNumberMustBe5Digits 
CHECK (TransitNumber NOT like '%[^0-9]%'  
       AND LEN(TransitNumber) = 5)

0

不要忘记从数据中排除回车符!

例如:

SELECT 
  Myotherval
  , CASE WHEN TRIM(REPLACE([MyVal], char(13) + char(10), '')) not like '%[^0-9]%' and RTRIM(REPLACE([MyVal], char(13) + char(10), '')) not like '.' and isnumeric(REPLACE([MyVal], char(13) + char(10), '')) = 1 THEN 'my number: ' +  [MyVal]
             ELSE ISNULL(Cast([MyVal] AS VARCHAR(8000)), '')
        END AS 'MyVal'
FROM MyTable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接