Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 - Fatal编程技术网

在SQL Server中将字符串转换为日期

在SQL Server中将字符串转换为日期,sql,sql-server,Sql,Sql Server,我面临一个问题,需要将字符串转换为日期,如 在SQL Server中,11年10个月12天后的某个日期 请帮忙,任何帮助都将不胜感激。我想你想要这样的东西 DECLARE @str VARCHAR(50)= '1 year 12 months 2 days' DECLARE @days INT= LEFT(@str, Charindex(' ', @str)), @months INT = Substring(@str, Charindex('months', @str) -

我面临一个问题,需要将字符串转换为日期,如

在SQL Server中,11年10个月12天后的某个日期


请帮忙,任何帮助都将不胜感激。

我想你想要这样的东西

DECLARE @str VARCHAR(50)= '1 year 12 months 2 days'
DECLARE @days   INT= LEFT(@str, Charindex(' ', @str)),
        @months INT = Substring(@str, Charindex('months', @str) - 3, 2),
        @years  INT = Substring(@str, Charindex('days', @str) - 3, 2);

WITH days_back
     AS (SELECT Dateadd(day, -@days, Cast(Getdate() AS DATE)) AS day_date),
     month_back
     AS (SELECT Dateadd(month, -@months, day_date) AS month_date
         FROM   days_back)
SELECT Result = Dateadd(year, -@years, month_date)
FROM   month_back 

你希望是哪一天?sql中的日期是时间点,而不是范围。另外,您正在使用哪些数据库管理系统?sql server mysql。我正在使用sql server 2012,我只需要日期,不需要时间。任何日期格式都是有效的。您可以将这11年10个月12天与当前日期进行比较,然后计算日期。请准确说明您的要求。尽管阅读了您的问题2/3次,但我还是无法理解任何内容。人们没有时间阅读您的想法。因此,要获得日期,您将使用日期数据类型。当你说将11年10个月12天与当前日期进行比较时,这意味着什么?你想把这个毫无意义的字符串解析成一些有用的东西,然后在当前日期的基础上增加那么多天吗?通过这里提供一些细节来帮助我们。这个逻辑我可以使用,但最大的挑战是如何分割字符串,比如需要将年、月、日和12年、11月、10分开days@YashShukla-更新了我的答案以从字符串中提取值是的,现在我们可以用第一个空格分隔数字,但我的值是单个字符串,所以有吗从单个字符串中分离的方法,如从“1年2个月2天”中分离年-月和日期。您非常接近。@Yashshshukla字符串将始终采用这种格式1年2个月2days@YashShukla-这和你的想法不一样。他们只是想让你付出一些努力来解决你的问题,就是这样:是的,这就是我想要的,但只需要更改一次开始日期,我们可以将当前日期作为参考,然后减去它来计算日期吗?@Yashshhukla你应该能够自己处理这个小调整?我没有。我没有那么丰富的sqlI编辑答案的经验。现在,您所期望的结果可能是@today\u to\u before column
declare @fuzzy_date varchar(255) = '11 years 10 months 12 days'

declare @date date
declare @startdate date = '1999-12-31'
declare @today_to_before date = getdate()
declare @today_to_after date = getdate()

declare @years int, @months int, @days int, @foo varchar(255)

Set @years = left(@fuzzy_date, charindex('years', @fuzzy_date) - 1)

Select @fuzzy_date = right(@fuzzy_date, len(@fuzzy_date) - charindex('years', @fuzzy_date) - 5)

select @months = left(@fuzzy_date, charindex('months', @fuzzy_date) - 1)

Select @days = replace(right(@fuzzy_date, len(@fuzzy_date) - charindex('months', @fuzzy_date) - 6), 'days', '')

Select @years, @months, @days

Set @date = dateadd(yy, @years, @startdate)
Set @date = dateadd(mm, @months, @date)
Set @date = dateadd(dd, @days, @date)


Set @today_to_after = dateadd(yy, @years, @today_to_after)
Set @today_to_after = dateadd(mm, @months, @today_to_after)
Set @today_to_after = dateadd(dd, @days, @today_to_after)

Set @today_to_before = dateadd(yy, -@years, @today_to_before)
Set @today_to_before = dateadd(mm, -@months, @today_to_before)
Set @today_to_before = dateadd(dd, -@days, @today_to_before)
Select @date,@today_to_after,@today_to_before