Как заставить этот оператор SQL возвращать пустые строки вместо NULLS? - PullRequest
2 голосов
/ 25 февраля 2009
LastAccessed=(select max(modifydate) from scormtrackings WHERE 
bundleid=@bundleid and userid=u.userid),
CompletedLessons=(select Value from scormtrackings WHERE 
bundleid=@bundleid and userid=u.userid AND param='vegas2.progress'),
TotalLessons=100,
TotalNumAvail=100,
TotalNumCorrect=(SELECT Value FROM scormtrackings WHERE 
bundleid=@bundleid AND userid=u.userid AND param='cmi.score.raw')

Это только часть большого оператора select, используемого моим ASP.NET Repeater, который продолжает сбой при значениях NULL, я пробовал ISNULL(), но либо он не работал, либо я делал неправильно.

ISNULL((SELECT max(modifydate) FROM scormtrackings WHERE 
bundleid=@bundleid AND userid=u.userid),'') AS LastAccessed,

(...)

???

ОБНОВЛЕНИЕ: я пробовал все это с возвратом '', 0, 1, вместо значения, которое было бы нулевым, и оно все еще не работает. 1015 *

Связанный вопрос:

Почему мой ретранслятор продолжает сбой при значениях Eval (NULL)?

Ответы [ 6 ]

10 голосов
/ 25 февраля 2009

Вы можете использовать функцию COALESCE , чтобы избежать получения нулей. По сути, он возвращает первое ненулевое значение из списка.

SELECT COALESCE(dateField, '') FROM Some_Table

Это стандарт ANSI, хотя я заметил, что он недоступен в Access SQL.

3 голосов
/ 25 февраля 2009

Вы можете использовать CASE:

CASE WHEN MyField IS Null THEN ''
ELSE MyField
End As MyField
2 голосов
/ 25 февраля 2009
select max(isnull(modifydate, "default date") from scormtrackings where...

будет работать до тех пор, пока есть хотя бы одна строка, удовлетворяющая предложению where, в противном случае вы все равно получите NULL

select IsNull( max(modifydate), "default_date") from scormtrackings where ...

должно работать во всех случаях

0 голосов
/ 23 марта 2017

Вы можете использовать NVL.

NVL(<possible null value>,<value to return when arg1 is null>)

0 голосов
/ 25 февраля 2009

Это тоже работает ... не хочется признавать, как часто я его использую !!

Объявить @LastAccessed varchar (30)

Выберите @LastAccessed = max (modifydate) из scormtrackings

Set @LastAccessed = isnull (@LastAccessed, '')

Выберите @LastAccessed как LastAccessed

0 голосов
/ 25 февраля 2009
select max(isnull(Date,"default date")) .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...