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