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