Я пытаюсь создать скалярную функцию, которая позволит мне иметь дело с нулевыми датами, которые отображаются как 01.01.1900. Я могу выписать логику в запросе, но когда я пытаюсь сделать это функцией, возвращаю ли я varchar или дату, формат становится неправильным.
Это CASE для строки столбца в select:
CASE WHEN CONVERT(VARCHAR(10), CAST(f.[DateStart] AS DATE),101) = '01/01/1900'
THEN ''
ELSE CONVERT(VARCHAR(10), CAST(f.[DateStart] AS DATE),101)
END AS 'DateStart'
Если я сделаю это функцией, например так:
ALTER FUNCTION dbo.ConvertDate(@d datetime)
RETURNS VARCHAR
AS
BEGIN
RETURN (SELECT CASE WHEN CONVERT(VARCHAR(10), CAST(@d AS DATE),101) = '01/01/1900'
THEN ''
ELSE CONVERT(VARCHAR(10), CAST(@d AS DATE),101)
END);
END
GO
Я верну 0на законную дату. Если я вернусь в качестве даты, она вернет правильную дату как 2019-10-08 и вернет нулевую дату как 1900-01-01. Кто-нибудь знает, как заставить функцию возвращать способ выполнения оператора case в select, как я хочу? Просто пытаюсь свести к минимуму повторение одной и той же длинной логики во всех моих хранимых процессах.
Спасибо!