如何在SQL Server中将nvarchar转换为数字

如何在SQL Server中将nvarchar转换为数字,sql,sql-server,Sql,Sql Server,如何将nvarchar转换为numeric 我得到了这个错误: 将数据类型nvarchar转换为数字时出错 这是我的问题 SELECT strIpay88Amt, CONVERT(NUMERIC(18, 2), strIpay88Amt) AS iPay FROM tblCurrTrxMaster 尝试强制转换语法: SELECT strIpay88Amt, CAST(strIpay88Amt AS NUMERIC) AS iPay FROM tblCurrTr

如何将
nvarchar
转换为
numeric

我得到了这个错误:

将数据类型nvarchar转换为数字时出错

这是我的问题

SELECT 
    strIpay88Amt, 
    CONVERT(NUMERIC(18, 2), strIpay88Amt) AS iPay
FROM
    tblCurrTrxMaster 
尝试强制转换语法:

 SELECT strIpay88Amt, CAST(strIpay88Amt AS NUMERIC) AS iPay FROM tblCurrTrxMaster 

您的表中必须有某个条目不是有效数字,因此您的转换失败,这是理所当然的

因此,为了找到这些条目,您可以尝试以下方法:

SELECT 
    strIpay88Amt, 
    TRY_CONVERT(NUMERIC(18, 2), strIpay88Amt) AS iPay
FROM
    dbo.tblCurrTrxMaster 
WHERE
    TRY_CONVERT(NUMERIC(18, 2), strIpay88Amt) IS NULL
这将使用
TRY\u CONVERT
函数尝试转换-使用此
WHERE
子句,您将只返回那些无法转换为有效的
数值的所有条目


虽然
NULL
将正确地“转换”为数字,但例如空字符串(
'
)已经会导致错误……

假设strIpay88Amt列中存在字符串值。 您可以使用以下命令仅转换数值

select cast(strIpay88Amt as numeric) from tblCurrTrxMaster 
where ISNUMERIC(strIpay88Amt) = 1
并跟随以获取字符串值

select strIpay88Amt from tblCurrTrxMaster where ISNUMERIC(strIpay88Amt) = 0

将数据类型nvarchar转换为数字时仍会出现相同的错误->错误。您确定此列中的所有数据都是数字吗?不,实际上,我想将nvarchar转换为数字。发生这种情况是因为此列的数据列表中有字符。请确保此列的所有数据都是数字,然后使用此语法。该列中的所有数据都是nvarchar。我想把它转换成数字。那么
strIpay88Amt
列中存储的值是什么?如果这是一个金额,那么为什么这是一个
nvarchar
类型的开始??您应该始终使用最合适的数据类型-如果您有金额,那肯定不是
nvarchar
!你是对的,但是我收到了'nvarchar'中的值,这就是我使用'nvarchar'的原因。但是我想将amount值转换为'numeric'以将该值带到其他应用程序中。该列中的值为1.00和null。这些值转换为
numeric
很好-您必须尝试转换其他值,从而引发此错误。。。。。唯一的原因可能是您的“locale”使用逗号
作为十进制分隔符,而字符串则向您发送一个点(
)。你能试试这个:
选择CAST(N'1.0'作为数字(18,2))
这在你的服务器上有效吗,或者抛出一个错误?接下来用
1,0
替换
1.0
,然后重试again@marc_c如果值为1.0,它将强制转换,但如果使用(
)则会发生错误。
ISNUMERIC
是出了名的错误,并且返回了很多“误报”-我更愿意使用
try\u cast
函数来更可靠地处理此问题。。。。