Скалярная функция SQL с преобразованием даты? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь создать скалярную функцию, которая позволит мне иметь дело с нулевыми датами, которые отображаются как 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, как я хочу? Просто пытаюсь свести к минимуму повторение одной и той же длинной логики во всех моих хранимых процессах.

Спасибо!

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