【发布时间】:2014-12-30 21:07:45
【问题描述】:
我有一个表,它的列从 VARCHAR 更改为 DECIMAL(20,7) 数据类型。我需要找出列中哪些行具有违反DECIMAL(20,7) 数据类型的值,我相信我已经接近了。
到目前为止,我所拥有的是:
SELECT *
FROM tableName
WHERE
(ISNUMERIC(columnName) = 0 and columnName IS NOT NULL)
OR (columnName LIKE '%,%')
OR (LEN(columnName) > 20)
我想我主要是挂在LEN 支票上,因为我仍然会错过结果。有没有办法更深入地了解长度,以便我可以精确检查,而不仅仅是 20 的长度?
【问题讨论】:
-
SQL 服务器 2005/2008/2012
-
当然,检查 instr 的位置。并计算其右侧的位置。如果> 7,您有问题。如果多个 .你有问题。但似乎正则表达式可以完成所有这些,我只是写它们很糟糕。
-
如果您有权访问数据库的副本,您可以添加一个
DECIMAL(20, 7)类型的新列,然后循环遍历并一次复制一个来自varchar的值,注意以任何一个为准失败的。这很粗略,但避免追究所有可能的条件。 -
也许使用正则表达式?
标签: sql sql-server sql-server-2008 sql-server-2005 decimal