Sql server ISNULL对于货币数据类型-SQL Server无法正常工作

Sql server ISNULL对于货币数据类型-SQL Server无法正常工作,sql-server,Sql Server,为什么它返回“失败”,即使我的费用金额为0.00。我在SQL Server中遇到了这个问题。尝试以下方法: DECLARE @V_FEE MONEY = 0.00 IF ISNULL(@V_FEE,'')='' SELECT 'FAIL' ELSE SELECT 'PASS' declare @v_fee money = 0.00 if @v_fee is null select 'fail' else select 'pass' 事实上,如果你尝试: DECLARE

为什么它返回“失败”,即使我的费用金额为0.00。我在SQL Server中遇到了这个问题。

尝试以下方法:

DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE,'')=''
   SELECT 'FAIL'
ELSE
   SELECT 'PASS'
declare @v_fee money = 0.00
if @v_fee is null
   select 'fail'
else
   select 'pass'
事实上,如果你尝试:

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.0000

0.00
返回:
0.0000



返回:
pass

我认为发生这种情况是因为您在isnull上使用了不同的类型,您正在传递货币类型,并且使用varchar作为默认值。如果您在ISNULL上使用相同的类型,则在select上会收到PASS-answer。 试试这个:

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

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


检查一下。

你为什么要向char施法?
DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE, -1) = -1
      SELECT 'FAIL'
ELSE
     SELECT 'PASS'