Sql Oracle-如何基于特定值更改字段值

Sql Oracle-如何基于特定值更改字段值,sql,oracle,Sql,Oracle,我有一个连接的全名字段: CONCAT(CONCAT(CONCAT(u3.LAST_NAME, ', '), u3.FIRST_NAME), NVL(u3.MIDDLE_NAME, '')) AS TEAMLEAD_NAME 如果3个名称字段为空,我希望记录不显示任何内容,即 但当所有3个字段都为空时,记录显示一个来自姓氏部分的 我试着在整个字段、所有3个单独的名称字段周围放置一个NVLx,等等,但我仍然得到一个,返回 写这篇文章的最好方法是什么,这样当所有3个名称字段都为空时,我会得到一个返

我有一个连接的全名字段:

CONCAT(CONCAT(CONCAT(u3.LAST_NAME, ', '), u3.FIRST_NAME), NVL(u3.MIDDLE_NAME, '')) AS TEAMLEAD_NAME
如果3个名称字段为空,我希望记录不显示任何内容,即

但当所有3个字段都为空时,记录显示一个来自姓氏部分的

我试着在整个字段、所有3个单独的名称字段周围放置一个NVLx,等等,但我仍然得到一个,返回

写这篇文章的最好方法是什么,这样当所有3个名称字段都为空时,我会得到一个返回的空白字段


谢谢

我想这正是你想要的:

NULLIF(u3.LAST_NAME || ', ' || u3.FIRST_NAME || ' ' || u3.MIDDLE_NAME, ',  ') AS TEAMLEAD_NAME

如果三个名称都丢失,则该值将变回NULL。我在名字和中间名之间加了一个空格。

我想这就是你想要的:

NULLIF(u3.LAST_NAME || ', ' || u3.FIRST_NAME || ' ' || u3.MIDDLE_NAME, ',  ') AS TEAMLEAD_NAME

如果三个名称都丢失,则该值将变回NULL。我在名字和中间名之间加了一个空格。

一种方法可以让你很快做到,但条件可以改善:

CASE
    WHEN u3.LAST_NAME IS NULL AND u3.FIRST_NAME IS NULL AND u3.MIDDLE_NAME IS NULL THEN NULL
    ELSE CONCAT(CONCAT(CONCAT(u3.LAST_NAME, ', '), u3.FIRST_NAME), NVL(u3.MIDDLE_NAME, '')) 
END "TEAMLEAD_NAME"

一种方法可以快速完成,但条件可以改善:

CASE
    WHEN u3.LAST_NAME IS NULL AND u3.FIRST_NAME IS NULL AND u3.MIDDLE_NAME IS NULL THEN NULL
    ELSE CONCAT(CONCAT(CONCAT(u3.LAST_NAME, ', '), u3.FIRST_NAME), NVL(u3.MIDDLE_NAME, '')) 
END "TEAMLEAD_NAME"

你的陈述令人困惑。在Oracle中,被视为NULL。所以,NVLu3.MIDDLE_NAME是一个no-op。你的说法令人困惑。在Oracle中,被视为NULL。所以,NVLu3.MIDDLE_NAME是一个不可操作的名称。它仍然返回一个逗号,因为您在NVL中比较的字符串将永远不会为空,因为无论名称是否为空,您都要连接一个逗号。@doodlebob。使用NULLIF可以实现我的目的。@doodlebob-有一个小的语法错误,我已经冒昧地纠正了。一旦完成,代码就会正常工作。没有。它仍然返回一个逗号,因为您在NVL中比较的字符串将永远不会为空,因为无论名称是否为空,您都要连接一个逗号。@doodlebob。使用NULLIF可以实现我的目的。@doodlebob-有一个小的语法错误,我已经冒昧地纠正了。一旦完成,代码就会正常工作。