Если ваша функция возвращает целое число, результат от isnull
также будет целым числом. В случае, если возвращаемое значение равно null
, у вас будет неявное преобразование в целое число для '', и это будет 0.
Попробуйте это:
declare @xx int
select isnull(@xx,'')
Результат:
-----------
0
Вы можете получить пробел, если сначала приведете возвращаемое значение из вашей функции к varchar
.
declare @xx int
select isnull(cast(@xx as varchar(10)),'')
Результат:
----------
.
Если ваша функция возвращает 0
вместо null
, вы можете использовать nullif
, чтобы получить нулевое значение, прежде чем приводить к varchar
.
declare @xx int = 0
select isnull(cast(nullif(@xx, 0) as varchar(10)),'')
Резюме :
Вам нужно это:
Duration = isnull(cast(FunctionA(DateA,DateB) as varchar(10)),'')
или это
Duration = isnull(cast(nullif(FunctionA(DateA,DateB), 0) as varchar(10)),'')