如何在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
函数来更可靠地处理此问题。。。。