回答

收藏

从SQL函数获取单个值时,如何将NULL更改为0?

技术问答 技术问答 245 人阅读 | 0 人回复 | 2023-09-14

我有一个查询,计算两个日期之间所有项目的价格。这是select语句:
5 P2 |9 k$ y+ v0 z6 y  R* k2 ZSELECT SUM(Price) AS TotalPrice ' q( N1 w$ O: [% e+ D: H- J
FROM Inventory/ R6 [: z, x- E+ o
WHERE (DateAdded BETWEEN @StartDate AND @EndDate); x$ h- s" n7 I
您可以假定所有表均已正确设置。
+ k/ G; g4 b2 O% E# w4 _如果我在两个日期之间进行选择,并且在该日期范围内没有任何项目,则该函数返回NULL作为TotalPrice而不是0。
1 s4 N7 g7 `" u我如何确保如果找不到记录,则返回0而不是NULL?
7 }7 W7 g5 i" u' h                . j  ?& p6 K! k! b' V
解决方案:/ d0 q; ]/ Y/ Q' b: z
               
* Z! K6 D" _4 F8 C# z& C3 v1 g* o. J! w! ]0 a
/ A* P7 G9 r8 {+ `" n6 T. k" s
                大多数数据库服务器都有一个COALESCE函数,该函数将返回非空的第一个参数,因此下面的操作应该可以满足您的要求:
6 d* B' p/ h' i) w! i: A& KSELECT COALESCE(SUM(Price),0) AS TotalPrice
2 A7 c( e9 g  |8 @7 v3 e2 NFROM Inventory. }- y% Q3 @7 z& V: s: k5 s2 D- G; ?
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)* B0 j: N" D/ w) O$ M3 e5 a  d& E
由于似乎有很多关于
# G6 b$ ?& f, I2 T1 |7 q- \% M
$ x) k0 Q) s& }: o4 \5 u如果没有行匹配,COALESCE / ISNULL仍将返回NULL,请尝试以下查询,您可以按原样直接将其复制并粘贴到SQL Server中:
+ G2 l- d; e8 ]/ g) q
/ j* B9 Z. X7 o+ A$ Y$ h; n, @SELECT coalesce(SUM(column_id),0) AS TotalPrice / d/ X/ M' u5 R) O2 C3 g
FROM sys.columns' _" ~% y7 A0 b' L5 |7 s
WHERE (object_id BETWEEN -1 AND -2)
& G5 O1 f' j# E5 S( x请注意,where子句将sys.columns中的所有行都排除在考虑范围之外,但是’sum’运算符仍然导致返回的单行为null,该行合并为固定为0的单行。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则