Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 ISNUMERIC()不适用于小数_Sql Server 2008 R2_Isnumeric - Fatal编程技术网

Sql server 2008 r2 ISNUMERIC()不适用于小数

Sql server 2008 r2 ISNUMERIC()不适用于小数,sql-server-2008-r2,isnumeric,Sql Server 2008 R2,Isnumeric,我正在使用SQL Server 2008 R2函数ISNUMERIC来确定字符串是否为十进制。 当十进制数为逗号或逗号加句点时,它返回“1”。我可以解决这些问题,但此查询是SSRS报告的一部分,将分发给许多用户,我无法纠正所有问题 我可以用什么来代替ISNUMERIC来确定字符串是否是格式正确的十进制数?我无法使用TRY_PARSE,因为它在SQL SERVER 2012中可用,而我在2008 R2上 更新 我想用PATINDEX替换ISNUMERIC来识别小数。 这两个示例都返回0 SELEC

我正在使用SQL Server 2008 R2函数ISNUMERIC来确定字符串是否为十进制。 当十进制数为逗号或逗号加句点时,它返回“1”。我可以解决这些问题,但此查询是SSRS报告的一部分,将分发给许多用户,我无法纠正所有问题

我可以用什么来代替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]%')

我做错了什么?

您的PATINDEX参数值是相反的。这应该对你有用

SELECT PATINDEX('%[0-9]%,%[0-9]%', '9,0')
SELECT PATINDEX('%[0-9]%.%[0-9]%', '9.0')

诺埃尔

Duh!谢谢但是,如果我也要包含整数,我会只在查询中添加一个或,还是有办法改变模式?你需要添加一个或@gloriasanti,我想你必须在CASE语句中使用或。像这样的。。。当PATINDEX“%[0-9].%[0-9]%”、“9.0”=1或PATINDEX“%[0-9]%”、“9”=1时选择大小写,然后选择1或0。我将尝试这样做,因为将or放入where子句不起作用。当字符串值试图转换为数字时,它仍会抛出一个错误。因此,当值不是数字时,它将通过PATINDEX函数。您的目标是什么?你为什么不想使用ISNUMERIC?它不起作用。最初,我使用的是ISNUMERIC。此函数在执行一些搜索后返回'9,.7'字符串值的'true',声明不应使用此函数。如果您使用的是SQL 2012,您可以使用TRY_PARSE,但我使用的是SQL 2008。要获得明确的匹配功能,我认为除了使用正则表达式之外没有其他方法。此功能作为标准选项SQL Server 2008不可用。但是,它可以被添加。我认为这是一种中级到高级的技术。如果您能够解决这个问题,您的SQL Server管理员/DBA可能会说不行!下面是一些链接,介绍了同一解决方案的各种方法,即SQLServer2008中的正则表达式支持。另一种方法。还有一个。这是我必须为自己工作的一个。