我有一个我无法解决的奇怪错误(使用单行功能)。
此代码有效:
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'。
答案 0 :(得分:4)
@InputDate应该是datetime或datetime2
线索在代码中......
答案 1 :(得分:2)
您需要将参数类型设置为datetime而不是date:
CREATE FUNCTION [dbo].[DateOrNullToChar] (@InputDate datetime)
它正在静默地将字符串转换为日期参数类型,从而删除时间部分。