Я пытаюсь отобразить 00001
, когда результат запроса равен нулю, но запрос по-прежнему возвращает значение null. Я не знаю, что не так с моим запросом.
ИЗМЕНИТЬ:
Предполагая, что OBRNo
равно 123-5678-10-13-1619
, означает LEN(a.OBRNo) is 19
SELECT TOP 1 CASE WHEN RIGHT(a.OBRNo, 5) = NULL THEN '00001' ELSE a.OBRNo
END as CaseWhen,
ISNULL(a.OBRNo, '00001') as ISNULL,
RIGHT(OBRNo, 5) as OrderBy
FROM tbl_T_BMSCurrentControl as a
WHERE LEN(a.OBRNo) = 20 and a.ActionCode = 1
ORDER BY OrderBy DESC
WHERE LEN(a.OBRNo) = 20
- person devio   schedule 07.03.2017a.OBRNo
не пустая строка - person anatol   schedule 07.03.2017isnull
не может создавать строки там, где их нет. И он никогда не сможет вернуть какое-либо нулевое значениеa.OBRNo
, поскольку вы фильтруете поlen(a.OBRNo) = 20
, что всегда будет ложным для нулевого значения (и даже если бы это было не так, оно все равно определенно не было бы 20 :)). Возможно, вы захотите проверить, как работают нули в ANSI SQL — это очень важно сделать правильно. - person Luaan   schedule 07.03.2017