Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 将空varchar转换为数字_Sql_Sql Server - Fatal编程技术网

Sql 将空varchar转换为数字

Sql 将空varchar转换为数字,sql,sql-server,Sql,Sql Server,我使用的是SQL server 2008 R2和Microsoft SQL server Management Studio 0.50.2500.0 在我的存储过程中 我正在将varchar转换为数值(18,2) 值为“”时返回0.00,这是必需的 但现在,它的给定错误是“将数据类型varchar转换为数字时出错”。 谁能告诉我我做错了什么?或者是谁造成了这种变化 提前感谢。不知道为什么,但试试这个,它应该会起作用,进一步调查为什么它会允许您这样做,如果您在这个网站上找到任何东西,请更新我们 S

我使用的是SQL server 2008 R2和Microsoft SQL server Management Studio 0.50.2500.0

在我的存储过程中

我正在将varchar转换为数值(18,2)

值为“”时返回0.00,这是必需的

但现在,它的给定错误是“将数据类型varchar转换为数字时出错”。

谁能告诉我我做错了什么?或者是谁造成了这种变化


提前感谢。

不知道为什么,但试试这个,它应该会起作用,进一步调查为什么它会允许您这样做,如果您在这个网站上找到任何东西,请更新我们

SELECT CONVERT(numeric(18,2),CAST(' ' AS INT))
结果

(No column name)
0.00

我一直在网上寻找一些解释,只是发现我对这种行为还不是很清楚

不确定是否需要它同时处理非空值

Declare @myValue varchar(10)
SET @myValue = ' '

SELECT 
    CASE 
        WHEN @myValue <> ' ' THEN 
            CONVERT(numeric(18,2), @myValue) 
        ELSE '0.00' 
    END
Declare@myValue varchar(10)
设置@myValue=''
挑选
案例
当@myValue“”时
转换(数字(18,2),@myValue)
否则为“0.00”
结束
产出0.00

Declare @myValue varchar(10)
SET @myValue = '3.2'

SELECT 
    CASE 
        WHEN @myValue <> ' ' THEN 
            CONVERT(numeric(18,2), @myValue) 
        ELSE
Declare@myValue varchar(10)
设置@myValue='3.2'
挑选
案例
当@myValue“”时
转换(数字(18,2),@myValue)
其他的
输出3.20

谢谢大家

我找到了根本原因。我已将与转换值相关的列数据类型float更改为numeric

前,

结果

0.00
将@VAL1数据类型更改为数字

DECLARE @VAL nvarchar(10);
DECLARE @VAL1 numeric(18,2);
set @VAL=' '; 
set @VAL1=12.123;
select convert(numeric(18,2),(case when 2=1 then @VAL1 else @VAL end ));
它导致错误,“将数据类型nvarchar转换为数字时出错”

如果有人解释这里到底发生了什么,我们会很欢迎的

declare @value varchar(10)=''

select case when ISNUMERIC(@value)=1 then convert(numeric(18,2),@value) else convert(numeric(18,2),0) end

因此,如果
@value
=''结果将为0.00。也就是说,如果值为6,那么,
声明@VAL1 float的结果将为6.00

在执行此语句时

选择convert(数字(18,2),(当2=1时,则为@VAL1,否则为@valend))

Sql server在内部将
@VAL
转换为
Float
datatype of@VAL1
),然后compare将输出为零

DECLARE @VAL nvarchar(10);
DECLARE @VAL1 float;
set @VAL=' ';
set @VAL1=12.123;
select @VAL,@VAL1
select CONVERT(float,@VAL)--done by sql server internally 
select convert(numeric(18,2),(case when 2=1 then @VAL1 else @VAL end ));
但是,对于
DECLARE@VAL1 numeric(18,2)

它实际上在sql server内部转换时出错

DECLARE @VAL nvarchar(10);
DECLARE @VAL1 numeric(18,2);
set @VAL=' '; 
set @VAL1=12.123;
select @VAL,@VAL1
select CONVERT(numeric(18,2),@VAL)--at this point,sql sever unabled to convert @VAL to datatype Numeric
select convert(numeric(18,2),(case when 2=1 then @VAL1 else @VAL end ));

嗨,请看一下,试试这个

declare @xx as varchar(10)
set @xx = ''

select case when @xx ='' then convert(numeric(18,2),'0.00') 
       else convert(numeric(18,2),@xx) end as test

谢谢

我无法将
转换(数字(18,2),“”)
到工作状态。是否有任何与SQL Server版本相关的内容?我尝试了2005和2012两个版本,但都出现了错误
DECLARE @VAL nvarchar(10);
DECLARE @VAL1 float;
set @VAL=' ';
set @VAL1=12.123;
select @VAL,@VAL1
select CONVERT(float,@VAL)--done by sql server internally 
select convert(numeric(18,2),(case when 2=1 then @VAL1 else @VAL end ));
DECLARE @VAL nvarchar(10);
DECLARE @VAL1 numeric(18,2);
set @VAL=' '; 
set @VAL1=12.123;
select @VAL,@VAL1
select CONVERT(numeric(18,2),@VAL)--at this point,sql sever unabled to convert @VAL to datatype Numeric
select convert(numeric(18,2),(case when 2=1 then @VAL1 else @VAL end ));
declare @xx as varchar(10)
set @xx = ''

select case when @xx ='' then convert(numeric(18,2),'0.00') 
       else convert(numeric(18,2),@xx) end as test