SQL里,如何将数据类型nvarchar转换成float?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL里,如何将数据类型nvarchar转换成float?相关的知识,希望对你有一定的参考价值。

先将nvarchar转换成decimal,再转换成float型就行了,例如:

declare @vnum varchar(20)  

declare @fnum float  

--set @fnum=CONVERT(decimal(18,2),'12.34567')--nvarchar转float  

--set @vnum=CONVERT(varchar(20),12.34567)+'%'--float转nvarchar  

set @fnum=CAST('12.3452145' AS DECIMAL(20,2))  

set @vnum=CAST(12.3452145 AS varchar(20))+'%'  

print @fnum--12.35   

print @vnum

参考技术A

代码如下:

CREATE  proc pro_SelSectionNews(@sectionName nvarchar(50),@Num int)as begin
declare @sql nvarchar(500) set @sql='SELECT * top '+rtrim(@Num)+' FROM News WHERE AdminUserName=SELECT sectionID FROM section WHERE sectionName='''+ @sectionName + ''''

print @sql  exec (@sql)

end

特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错

【中文标题】特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错【英文标题】:Specific column -- Error converting data type nvarchar to bigint 【发布时间】:2017-03-22 12:41:51 【问题描述】:

这是 T-SQL 的一部分。我遇到了错误。谁能指导我。问题是因为 value 列是 nvarchar 数据类型

SELECT RuleID, SourceID, DataFileID, ChildCount, DP_State 
FROM        
(SELECT DP_State.RuleID, CAST(DP_State.SourceID AS VARCHAR(20)) AS SourceID, CAST(DP_State.DataFileID AS VARCHAR(20)) AS DataFileID, ChildCount, DP_State
FROM (
        SELECT  RuleID ,
                RuleResultID ,
                CASE WHEN ISNUMERIC(ISNULL([ResultValue], 0)) = 1 THEN                      
                CAST(ISNULL([Value], 0) AS BIGINT)
ELSE
                    -1
                END AS ChildCount,

我得到的错误:

【问题讨论】:

ISNUMERIC() is unreliable, SELECT ISNUMERIC(ISNULL([ResultValue], 0)), ResultValue 看看哪里有意外1 嗨@AlexK。,我已经执行了 SELECT ISNUMERIC(ISNULL([ResultValue], 0)), ResultValue 并且列中有很多 1 和 ResultValue。 您可以使用 TRY_CAST() 而不是 CAST() 来查看在哪里获得 NULL VALUE(这是 TRY_CAST 不能转换的唯一值)。 查看我评论中的链接,ISNUMERIC 认为像 '.' 这样的值 数字,但将其转换为数字类型将失败,并出现您遇到的错误。 @AlexK.,没错,ISNUMERIC 认为 +- 也是数字 【参考方案1】:

如果您使用的是 SQL Server 2012 或更高版本,请尝试此操作

SELECT RuleID,
    SourceID,
    DataFileID,
    ChildCount,
    DP_State
FROM (
    SELECT DP_State.RuleID,
        CAST(DP_State.SourceID AS VARCHAR(20)) AS SourceID,
        CAST(DP_State.DataFileID AS VARCHAR(20)) AS DataFileID,
        ChildCount,
        DP_State
    FROM (
        SELECT RuleID,
            RuleResultID,
            CASE 
                WHEN TRY_CONVERT(INT, ISNULL([ResultValue],0)) IS NOT NULL
                    THEN CAST(ISNULL([Value], 0) AS BIGINT)
                ELSE - 1
                END AS ChildCount,
        )
    )

【讨论】:

@感谢您的帮助。它解决了我的问题。 很高兴我能提供帮助。@SQLBoy【参考方案2】:

通过首先检查[value]0 中的0,您正在隐式转换为整数。只有在那之后您才转换为整数,而是尝试以下操作:

根据字符串计算:

CAST(ISNULL([Value], '0') AS BIGINT)

或者先转换成整数:

ISNULL(CAST([Value] AS BIGINT), 0)

【讨论】:

感谢您的回复@Aquillo,它帮助我意识到我的问题。

以上是关于SQL里,如何将数据类型nvarchar转换成float?的主要内容,如果未能解决你的问题,请参考以下文章

在sql server数据库中将一个nvarchar类型的空值转换成decimal(18,3)类型

如何更正将 nvarchar 转换为 sql 数据类型 numeric(9, 4) 的数字的算术溢出错误? [关闭]

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

SQL 异常:将 nvarchar 值“[anyvalue]”转换为数据类型 int 时转换失败

SQL / Python尝试检查数据是不是已存在:将nvarchar转换为数据类型数字的算术溢出错误

将 nvarchar 值转换为数据类型 int 和其他 SQL Server 错误时失败