【发布时间】:2019-04-02 11:47:33
【问题描述】:
我在表中有一个 varchar 字段。我必须检查哪些行包含除数字(0-9)之外的任何内容。不允许使用任何其他字符(. 等)。
ISNUMERIC 没有帮助,因为字符串可能比任何可转换为 SQL-Server 中的数字数据类型的字符串都长。
关于如何做到这一点的任何想法?
非常感谢!
【问题讨论】:
-
为什么首先将数字存储为字符串?
-
你想做什么?如果该字段应该包含一个数字,它应该是一个数字类型。另一方面,这些数字可能是发票号码或其他业务领域。在任何情况下,SQL 都不是字符串操作的好语言。如果您想检测无效数据,最好使用外部程序来查找无效行。如果您想创建例如触发器,那么最好创建一个使用例如
Int.Parse或正则表达式的SQLCLR UDF。可能还有其他方法,但都不会很快 -
@PanagiotisKanavos 有时一串数字有前导零但不是固定长度。这不适合作为整数数据类型。
-
@HABO 我在评论和回答中解释了这一点。如果它有前导零,则它不是数字。这是一个业务字段,其值仅包含数字。增值税号就是这样的情况
-
它是您正确假设的业务领域。我几乎没有能力修改正在使用数据的程序本身,所以我需要在另一端找到无效数据。不幸的是,遗留代码。
标签: sql-server tsql