Как отобразить сообщение вместо NULL - PullRequest
4 голосов
/ 02 декабря 2011

Я возвращаю запрос с именами, курсами и кодами курсов, но там, где код курса равен нулю, я хотел бы отобразить «НЕ ЗАПИСАНО».Могу ли я сделать это с помощью «по умолчанию»?Оператор 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;

Я получаю ответ НЕ ЗАГРАНИЧЕН недопустимый идентификатор ... Я пытался без кавычек Я использую оракул.

Ответы [ 6 ]

3 голосов
/ 02 декабря 2011
SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,"NOT_ENROLLED") FROM STUDENT_LIST;

Я получил ответ НЕ ЗАПРАВЛЕН неверный идентификатор ... Я пытался без кавычек я использую оракул.

Это потому, что вы используете двойные кавычки вокруг NOT_ENROLLED. В Oracle вы используете одинарные кавычки вокруг строковых литералов. Идентификаторы-разделители в двойных кавычках могут содержать встроенные пробелы, поэтому Oracle считает, что NOT_ENROLLED - это идентификатор, а не строковый литерал.

Используйте это:

    SELECT STUDENTNAME, DATEOFBIRTH, NVL(COURSECODE,'NOT_ENROLLED') FROM STUDENT_LIST;
2 голосов
/ 02 декабря 2011

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.

1 голос
/ 02 декабря 2011

Используйте нвл.Различные реализации могут различаться, например, для MySQL вы хотите ifnull.

0 голосов
/ 22 июня 2017

Один из аспектов проблемы, не затронутой здесь, заключается в том, что мы рассмотрели только общий сценарий ввода текстового «отображаемого сообщения» в поле символа в таблице.

Если бы это было, скажем, другое числовое поле, такое как, например, DOB ... в этом случае мы конвертируем use to_char и сохраняем поле, в противном случае мы получили бы ошибку для неверного ввода

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

Это сохранит текст в числовом поле, что в противном случае привело бы к ошибке.

0 голосов
/ 02 декабря 2011

Чтобы избежать НЕ ЗАЯВЛЕННОГО недействительного идентификатора ответа, вы должны заменить двойную кавычку одинарной кавычкой:

заменить:

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

по:

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

Для Oracle двойные кавычки предназначены для идентификаторов столбцов или таблиц (например, с пробелом: "Всего элементов")

0 голосов
/ 02 декабря 2011

Если вы используете mySql, тогда да! Вы можете установить значение по умолчанию для NULL. И всякий раз, когда значение будет ни одно, это значение будет сохранено в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...