2013-05-09 2 views
0

У меня есть странная ошибка, которую я не могу решить (с одной строкой).Простая функция T-SQL для преобразования даты в отображаемый формат

Этот код работает:

DECLARE @TestDate datetime = '2013-05-01 23:15:11' 
select IsNull(convert(varchar(max), @TestDate, 120), 'null') as 'test1' 

Дисплеи: 2013-05-01 23:15:11

CREATE FUNCTION [dbo].[DateOrNullToChar] (@InputDate date) 
RETURNS VARCHAR(40) 
BEGIN 
    return ISNULL(convert(varchar(40),@InputDate, 120),'null'); 
END 
select dbo.DateOrNullToChar('2013-05-01 23:15:11') as 'result' 

Возвращает: 2013-05-01 (нет времени)

Я также попытался varchar(max).

Целью этой функции является то вроде этого:

Set @ErrorMessage = ' @ArrivalDate=' + dbo.DateOrNullToChar(@ArrivalDate) + 
        ' @DepartureDate=' + dbo.DateOrNullToChar(@DepartureDate); 

Если какое-либо одно значение равно нулю, то вся стоимость становится нулевой. Поэтому я хочу увидеть строку «null», когда дата имеет нулевое значение.

ответ

4

@InputDate должны быть DateTime или datetime2, если вы хотите время показать

Улики в коде ...

  • @TestDate DateTime
  • Дата @InputDate
+1

О, это было так очевидно - но я пропустил это. – NealWalters

2

Вам необходимо указать тип параметра как дата, а не дату:

CREATE FUNCTION [dbo].[DateOrNullToChar] (@InputDate datetime) 

Это тихо преобразует строку в тип параметра даты и, таким образом, отбрасывает временную часть.

Смежные вопросы