nvl(c.ADDRESS,e1.zadymc || e2.zadymc || decode(e3.zadymc,'其它','',e3.zadymc) || d.bajzdz)转postgresql
时间: 2024-09-13 12:15:59 浏览: 25
在 PostgreSQL 中,`NVL` 函数并不是一个内置函数,但是在 Oracle 中,`NVL` 函数的作用是返回两个参数中第一个非空(NotNull)的参数。如果您想要在 PostgreSQL 中实现类似的功能,可以通过其他方式来替代。
在您提供的表达式中,`NVL` 似乎是用于将 `c.ADDRESS` 的值替换为 `e1.zadymc`、`e2.zadymc`、`e3.zadymc` 或者 `d.bajzdz` 中的非空值。在 PostgreSQL 中,您可以使用 `COALESCE` 或者 `CASE` 语句来实现相同的功能。
使用 `COALESCE` 的等效表达式可能如下所示:
```sql
COALESCE(c.ADDRESS, e1.zadymc, e2.zadymc, e3.zadymc, '其它', d.bajzdz)
```
`COALESCE` 函数会返回它的参数中第一个非空的值。
如果您需要对 `e3.zadymc` 进行特定的处理,比如当它是空字符串时返回 '其它',而不是直接返回 '其它',可以使用 `CASE` 语句来实现:
```sql
CASE
WHEN c.ADDRESS IS NOT NULL THEN c.ADDRESS
WHEN e1.zadymc IS NOT NULL THEN e1.zadymc
WHEN e2.zadymc IS NOT NULL THEN e2.zadymc
WHEN e3.zadymc != '' THEN e3.zadymc
WHEN d.bajzdz IS NOT NULL THEN d.bajzdz
ELSE '其它'
END
```
在上述 `CASE` 语句中,我们首先检查 `c.ADDRESS` 是否非空,如果非空则返回其值;如果为空,则依次检查 `e1.zadymc`、`e2.zadymc`、`e3.zadymc` 等,直到找到第一个非空的值;如果所有值都为空,则返回 '其它'。