Sql 如何添加带有计算的case语句?
我尝试了SAP Business One数据库中的一个案例陈述,通过考虑税收类型来获得不含税的首期付款金额。但它返回了以下错误 '将数据类型varchar转换为数字时出错。' 这是我的代码供参考Sql 如何添加带有计算的case语句?,sql,sql-server,case,Sql,Sql Server,Case,我尝试了SAP Business One数据库中的一个案例陈述,通过考虑税收类型来获得不含税的首期付款金额。但它返回了以下错误 '将数据类型varchar转换为数字时出错。' 这是我的代码供参考 select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else '' end) from DPI1 这在没有如下情况的情况下有效: select (cast(LineTotal as decim
select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else '' end) from DPI1
这在没有如下情况的情况下有效:
select (cast(LineTotal as decimal(22,8)) /1.02) from DPI1
错误是什么。我怎样才能克服这个问题
select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else null end) from DPI1
使用上面的查询当您使用
CASE
表达式时,CASE的两个输出都应该返回相同的数据类型,否则将导致CAST
错误
正如@Larnu所说,隐式转换只会发生在Int
/Float
上,而不会发生在Decimal
上,所以当您在case表达式中返回Decimal时,您需要显式转换,否则将返回0或null
在您的情况下,CAST(LineTotal为十进制(22,8))/1.02
returnNULL
否则返回空字符串,这将导致错误
或
大小写
表达式<代码>Case(Switch
)语句在t-SQL中不存在。当您将ELSE
分支中的空字符串('
)替换为NULL
?@stickybit时,会发生什么情况?这就是错误。我应该被更正为LineTotal,而不是“No@Larnu”。这应该是错误,请检查您的查询这里显然咖啡还没有设置<代码>'可以隐式转换为int
,brain刚才说的是“数字”数据类型。@SQL Server''中的Larnu字符串不会隐式转换为数字数据类型,我们可以显式将其转换为ascast(''as int)
。。。你同意我的回答吗?不,那不是真的,@Neverdiedecimal
/Numeric
,float
/real
和int
的行为都截然不同。请注意,只有decimal
失败,而不是float
和int
@Larnu是的,我同意这一点,但用户希望以decimal
输出。
SELECT (CASE WHEN taxcode = 'NBT2' THEN (CAST(LineTotal AS decimal(22,8)) /1.02)
ELSE 0.0 END)
FROM DPI1
SELECT (CASE WHEN taxcode = 'NBT2' THEN (cast(LineTotal AS decimal(22,8)) /1.02)
ELSE NULL END)
FROM DPI1