简单的T-SQL函数将日期转换为可显示的格式

时间:2013-05-09 15:41:37

标签: sql-server-2008 tsql

我有一个我无法解决的奇怪错误(使用单行功能)。

此代码有效:

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,则整个值变为null。因此,当日期具有空值时,我希望看到字符串'null'。

2 个答案:

答案 0 :(得分:4)

如果你想要时间显示,

@InputDate应该是datetime或datetime2

线索在代码中......

  • @TestDate datetime
  • @InputDate date

答案 1 :(得分:2)

您需要将参数类型设置为datetime而不是date:

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

它正在静默地将字符串转换为日期参数类型,从而删除时间部分。