0

解決できない奇妙なバグがあります (1 行の関数で)。

このコードは機能します:

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 値がある場合、文字列 'null' を表示したいと考えています。

4

2 に答える 2

4

時刻を表示する場合は、@InputDate を datetime または datetime2 にする必要があります。

手がかりはコードにあります...

  • @TestDate日時
  • @InputDate 日付
于 2013-05-09T15:45:40.653 に答える
2

パラメータの型を date ではなく datetime にする必要があります。

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

文字列を日付パラメーターの型に静かに変換しているため、時間部分が削除されます。

于 2013-05-09T15:45:42.443 に答える