0

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

此代码有效:

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

2 回答 2

4

@InputDate 应该是 datetime 或 datetime2 如果你想显示时间

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

  • @TestDate 日期时间
  • @InputDate 日期
于 2013-05-09T15:45:40.653 回答
2

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

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

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

于 2013-05-09T15:45:42.443 回答