如何显示消息而不是NULL

时间:2011-12-02 18:32:36

标签: sql oracle

我正在返回一个包含姓名,课程和课程代码的查询,但是如果课程代码为null,我想显示“NOT ENROLLED”。 我可以使用'默认'来做到这一点吗? select语句来自VIEW,这会有所不同。

CREATE VIEW STUDENT_LIST
(studentname, dateofbirth, coursecode)
AS 
SELECT COURSECODE, STUDENTNAME, DATEOFBIRTH
FROM STUDENT;

SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,"NOT_ENROLLED")
FROM STUDENT_LIST;

我收到回复未注册无效标识符...我试过没有引号 我正在使用oracle。

6 个答案:

答案 0 :(得分:3)

SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,"NOT_ENROLLED") FROM STUDENT_LIST;
  

我收到回复NOT ENROLLED无效标识符...我试过了   没有引号我正在使用oracle。

这是因为您在NOT_ENROLLED周围使用双引号。在Oracle中,您使用字符串文字周围的单引号。双引号分隔可能具有嵌入空格的标识符,因此Oracle认为NOT_ENROLLED是标识符,而不是字符串文字。

使用此:

    SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,'NOT_ENROLLED') FROM STUDENT_LIST;

答案 1 :(得分:2)

ORACLE有NVL()

SQL Server有ISNULL()

MySQL有IFNULL()

以上所有和PostgreSQL支持COALESCE()

所以,

SELECT STUDENTNAME, 
       DATEOFBIRTH, 
       NVL(COURSECODE,'NOT_ENROLLED') 
FROM STUDENT_LIST;

SELECT STUDENTNAME, 
       DATEOFBIRTH, 
       COALESCE(COURSECODE,'NOT_ENROLLED') 
FROM STUDENT_LIST;
在Oracle中

答案 2 :(得分:1)

使用nvl。不同的实现可以变化,例如对于MySQL,你想要ifnull。

答案 3 :(得分:0)

如果您使用的是mySql,那么是的!您可以为NULL设置默认值。每当一个值为none时,该值将保存在数据库中。

答案 4 :(得分:0)

为避免NOT ENROLLED无效标识符回复,您应该用单引号替换双引号:

取代:

SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,"NOT_ENROLLED")
FROM STUDENT_LIST;

由:

SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,'NOT_ENROLLED')
FROM STUDENT_LIST;

对于Oracle,双引号用于列或表标识符(例如,包含空格:“总项目”)

答案 5 :(得分:0)

这里没有涉及的问题的一个方面是我们只考虑了输入文本的一般情况"显示消息"在表中的字段中。

如果它是一个不同的数字字段,例如DOB ......在这种情况下我们转换使用to_char并保存字段,否则我们会因无效输入而被给出错误

SELECT e.studentname, NVL(TO_CHAR(e.dateofbirth),'PLS Contact admin to update'), NVL(e.COURSECODE,'NOT_ENROLLED')
FROM STUDENT_LIST e;

这会将文本保存到数字字段,否则会导致错误。