ISNULL无法正确处理货币数据类型 - SQL Server

时间:2017-01-30 22:09:23

标签: sql-server

DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE,'')=''
   SELECT 'FAIL'
ELSE
   SELECT 'PASS'

为什么它返回'FAIL'甚至我的费用金额为0.00。我在SQL Server中遇到了这个问题。

4 个答案:

答案 0 :(得分:2)

我认为这种情况正在发生,因为你在isnull上使用了不同的类型,你传递了一种货币类型而你正在使用varchar作为默认值。如果您在ISNULL上使用相同类型,则会在选择时收到PASS答案。 试试这个:

DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE, -1) = -1
      SELECT 'FAIL'
ELSE
     SELECT 'PASS'

答案 1 :(得分:2)

当运算符组合了两个不同数据类型的表达式时,数据类型优先级的规则指定优先级较低的数据类型转换为具有较高优先级的数据类型。

Data Type Precedence MSDN上查看。

答案 2 :(得分:1)

因为''转换为金钱时会转换为0.0000

select convert(money,'')

返回:0.0000

declare @v_fee money = 0.00
if @v_fee is null
   select 'fail'
else
   select 'pass'

返回:pass

答案 3 :(得分:0)

试试这个:

DECLARE @V_FEE MONEY = NULL

IF ISNULL(@V_FEE,0.00) = 0.00
   SELECT 'PASS'
ELSE
   SELECT 'FAIL'

事实上,如果你尝试:

DECLARE @V_FEE MONEY = 0.00;

SELECT ISNULL(@V_FEE, 'AAA');

它返回:

0.00