ISNUMERIC() 不适用于小数
Posted
技术标签:
【中文标题】ISNUMERIC() 不适用于小数【英文标题】:ISNUMERIC() does not work for decimals 【发布时间】:2017-02-03 14:59:10 【问题描述】:我正在使用 SQL Server 2008 R2 函数 ISNUMERIC() 来确定字符串是否为小数。 当小数点为逗号或逗号和句点时,它返回“1”。我可以解决这些问题,但此查询是 s-s-rS 报告的一部分,将分发给许多用户,我无法纠正所有问题。
我可以使用什么来代替 ISNUMERIC() 来确定字符串是否是正确格式的小数?我不能使用 TRY_PARSE(),因为它在 SQL SERVER 2012 中可用,而我在 2008 R2 上。
更新 我想用 PATINDEX() 替换 ISNUMERIC() 来识别小数。 这两个例子都返回 0
SELECT PATINDEX('9,0', '%[0-9]%.%[0-9]%')
SELECT PATINDEX('9.0', '%[0-9]%.%[0-9]%')
我做错了什么?
【问题讨论】:
你的目标是什么?为什么不想使用 ISNUMERIC()? 它不起作用。最初,我使用的是 ISNUMERIC()。对于字符串值 '9,.7',此函数返回 'true' 在进行一些搜索后,有人指出不应使用此函数。如果您使用的是 SQL 2012,则可以使用 TRY_PARSE() 但我使用的是 SQL 2008。 要获得明确的匹配功能,我认为除了使用正则表达式之外别无他法。此功能不作为 SQL Sever 2008 的标准选项提供。但是,可以添加它。我认为这是中级到高级技术。如果您能够弄清楚这一点,您的 SQL Server 管理员/DBA 可能会说“不可能!”以下是一些链接,其中包含相同解决方案的各种方法,SQL Server 2008 中的正则表达式支持。simple-talk.com/sql/t-sql-programming/… 另一种方法。 codeproject.com/articles/42764/… 还有一个。这是我必须为我工作的一个。 blogs.sap.com/2013/01/31/… 【参考方案1】:您的 PATINDEX 参数值是相反的。这应该适合你...
SELECT PATINDEX('%[0-9]%,%[0-9]%', '9,0')
SELECT PATINDEX('%[0-9]%.%[0-9]%', '9.0')
诺埃尔
【讨论】:
呃!谢谢!但是,如果我也想包含整数,我是否只需在查询中添加OR
还是有办法更改模式?
您需要添加一个 OR @GloriaSantin
我认为您将不得不在 CASE 语句中使用 OR。像这样... SELECT CASE WHEN PATINDEX('%[0-9]%.%[0-9]%', '9.0') = 1 OR PATINDEX('%[0-9]%', '9 ') = 1 THEN 1 ELSE 0 END
谢谢。我会尝试这样做,因为将 or
放在 where
子句中不起作用。
当字符串value
试图转换为数字时,它仍然会抛出错误,而实际上它不是。因此,该值在不是数字时通过PATINDEX
函数。以上是关于ISNUMERIC() 不适用于小数的主要内容,如果未能解决你的问题,请参考以下文章