3

ストアド プロシージャへの入力は、将来の日付である文字列 (たとえば、'2 年 3 か月 4 日') です。現在の日付と比較してこれを日付に変換する方法は?

4

4 に答える 4

1
declare @S varchar(50)
set @S = '2 years 3 months 4 days'

select dateadd(day, D.D, dateadd(month, D.M, dateadd(year, D.Y, getdate()))) as TheDate
from (select replace(replace(replace(@S, ' years ', '.'), ' months ', '.'), ' days', '')) as T(S)
  cross apply (
              select cast(parsename(T.S, 1) as int),
                     cast(parsename(T.S, 2) as int),
                     cast(parsename(T.S, 3) as int)Y
              ) as D(D, M, Y)

SQL フィドル

于 2013-09-28T14:26:36.830 に答える
0

SPで以下のクエリを使用できます

select dateadd(yy,2,dateadd(m,3,dateadd(d,4,GETDATE())))
                  ^Year       ^Month      ^Days

SPはこちら

create procedure test1
(
@year INT,
@month INT,
@day INT
)
AS
BEGIN
    select dateadd(yy,@year,dateadd(m,@month,dateadd(d,@day,GETDATE())))
END
于 2013-09-28T13:55:27.243 に答える
-1

たとえば、次のように使用DATEADDします (現在のデータに 1 年を追加します)。

DECLARE @datetime2 datetime2 = getdate();
SELECT 'year', DATEADD(year,1,@datetime2)
...

したがって、現在の日付に 2 年 3 か月 4 日を加算してから、通常の日付として返す必要があります (ここでは、将来の年を返しました)。詳細はこちらをご覧ください。

ストアド プロシージャを呼び出す前に、PHP などのサーバー側言語で文字列を分割する必要があります。

$str = '2 years 3 months 4 days';
preg_match_all('!\d+!', $str, $data);

$data[0]=2, $data[1]=3そして、そして@Luv$data[2] = 4プロシージャを呼び出すことができます:

create procedure test1 -- thanks to Luv
(
@year INT,
@month INT,
@day INT
)
AS
BEGIN
    select dateadd(yy,@year,dateadd(m,@month,dateadd(d,@day,GETDATE())))
END
于 2013-09-28T13:40:42.113 に答える