0

私はここで夢中になっていると思います。

SQL Server 2005 で SP を実行しようとしています。これは、日付を取得し、別のテーブルで検索して、期間番号と週番号を割り当てます (財務カレンダーの目的で)。

出力は、日時ではなく文字列として日付を保持する必要があります。

日付が遅れていないと、日付を表示することはできません。

私はいくつかの方法を試しました:

select cast(floor(cast(@CalcDate as float)) as datetime)

それを文字列に変換して元に戻す関数を作成しました。

CREATE FUNCTION dbo.DateToVarchar (@DateIn datetime)
RETURNS varchar(10)
AS
BEGIN
declare @DD [varchar] (2)
declare @MM [varchar] (2)
declare @YYYY [varchar] (4)
declare @DateOut [varchar] (10)
declare @DDLen [int]
declare @MMLen [int]

set @DD = datepart(dd,@DateIn)
set @DDLen = len(@DD)
set @DD = (case when @DDLen < 2 then '0' + @DD else @DD end)

set @MM = datepart(mm,@DateIn)
set @MMLen = len(@MM)
set @MM = (case when @MMLen < 2 then '0' + @MM else @MM end)

set @YYYY = datepart(yyyy,@DateIn)

set @DateOut = @YYYY + '-' + @MM + '-' + @DD

return @DateOut

END

SPの外で上記の関数を実行すると、日付が正常に返されます。SP を実行すると、2012-12-30 00:00:00.000 として返されます。

変数 @CalcDate は varchar(10) として宣言されています

何か案は?

前もって感謝します

編集

これまでのSPの本体は次のとおりです。

declare @StartDate [datetime]
,   @EndDate [Datetime]
,   @CalcDate [datetime] --This number will change in the WHILE loop to reflect the increment of days
,   @Week [varchar]
,   @Period [varchar]
,   @i [int]
,   @Year [int]
,   @CalcDay [int]
,   @CalcMonth [int]
,   @CalcYear [int]
,   @ConcatDate [char] (10)

set @StartDate = '2012-12-30'
set @EndDate = '2013-01-28'
set @Year = 2013
set @i = -1

-- Going to do a while loop here and instead of Week number and Period Number I'm going to do some calculations
set @Week = (Select WeekNum from aaGreensPeriodListTest Where PeriodNum = 1 and WeekNum = 1)
set @Period = (Select PeriodNum from aaGreensPeriodListTest Where PeriodNum = 1 and WeekNum = 1)
set @CalcDate = @StartDate + @i

set @CalcMonth = datepart(mm,@calcdate)

insert into aaGreensPeriodTest(RealDate,GreensYear,GreensPeriod,GreensWeek)
values (@CalcDate,@Year,@Period,@Week)

select @CalcDate as CalcDate, @CalcMonth as CalcMonth
4

2 に答える 2

0

http://msdn.microsoft.com/en-ca/library/ms187928.aspxに従って、float->date を直接キャストすることはできません。それは単にサポートされていません。ただし、datetime->date をキャストできるため、ダブルキャストする必要があります。または、あなたの例を考えると、トリプルキャスト:

CAST(CAST(CAST(@CalcDate AS float) AS datetime) AS date)
于 2013-04-08T04:24:45.290 に答える