Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server中将年-月-日转换为日期_Sql_Sql Server 2008 - Fatal编程技术网

在sql server中将年-月-日转换为日期

在sql server中将年-月-日转换为日期,sql,sql-server-2008,Sql,Sql Server 2008,我对存储过程的输入是一个字符串(例如“2年3个月4天”),它是未来的日期。如何通过与当前日期进行比较将其转换为日期?使用DATEADD,例如(向当前数据添加一年): 因此,您应该在当前日期的基础上再加上2年3个月4天,然后将其作为正常日期返回(这里我返回了未来一年)。详情请阅读 在调用存储过程之前,应使用服务器端语言(如PHP)拆分字符串: $str = '2 years 3 months 4 days'; preg_match_all('!\d+!', $str, $data); 所以$da

我对存储过程的输入是一个字符串(例如“2年3个月4天”),它是未来的日期。如何通过与当前日期进行比较将其转换为日期?

使用
DATEADD
,例如(向当前数据添加一年):

因此,您应该在当前日期的基础上再加上2年3个月4天,然后将其作为正常日期返回(这里我返回了未来一年)。详情请阅读

在调用存储过程之前,应使用服务器端语言(如PHP)拆分字符串:

$str = '2 years 3 months 4 days';
preg_match_all('!\d+!', $str, $data);
所以
$data[0]=2,$data[1]=3
$data[2]=4
,所以您可以调用@Luv过程:

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

您可以将这种格式拆分并转换为可通过内置SQL函数使用的格式,但我建议您至少使用一种预处理脚本语言,如PHP,以便正确设置时间格式,PHP“相对”格式可能就是其中之一,我记得datetime类功能非常强大




您可以在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

这根本解决不了他的问题-他有一些奇怪的“可读时间”格式,用它作为输入是。。。棘手。但我对参数的输入是“1年1个月1天”,即距离当前日期大约2014年10月29日(MM/DD/YYYY)。我需要计算此日期。在当前日期使用DATEADD执行此操作很简单,如示例中所示。在转到SQL之前更改输入难道不更容易吗?当然,SQL server中的字符串解析并不是那么简单。阅读我关于PHP解决方案的答案。他只是有一个字符串输入,尽管前面有.PHP解析。真正的问题是SQL部分。根本没有任何意义的“在前面出现”是。。。只是奇怪的荒谬。
create procedure test1
(
@year INT,
@month INT,
@day INT
)
AS
BEGIN
    select dateadd(yy,@year,dateadd(m,@month,dateadd(d,@day,GETDATE())))
END
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)