繁体   English   中英

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

[英]Converting year month day to date in sql server

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

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小提琴

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

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

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$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

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 将秒转换为人类可读的持续时间

你可以将这种格式拆分并转换为可通过内​​置SQL函数使用的东西 - 但我建议至少使用像PHP这样的预处理脚本语言来正确格式化时间,PHP“相对”格式可能只是那样的事情,我记得日期时间很强大......

http://www.php.net/manual/en/datetime.construct.php
http://www.php.net/manual/en/datetime.formats.relative.php
http://www.php.net/manual/en/datetime.formats.compound.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM