2016-03-01 104 views
-9

我面临的一个问题,我需要一个字符串转换为日期像将字符串转换为日期在SQL Server中

11年10个月12天的SQL Server中的日期。

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

+1

你所期望的日期是? sql中的日期是时间点,而不是范围。另外,你正在使用哪些DBMS? sql server <> mysql。 –

+0

我正在使用SQL服务器2012年,我只需要日期没有时间。任何日期格式有效 –

+0

您可以比较这11年10个月12日从当前日期,然后计算日期 –

回答

1

我想你想是这样的

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, [email protected], Cast(Getdate() AS DATE)) AS day_date), 
    month_back 
    AS (SELECT Dateadd(month, [email protected], day_date) AS month_date 
     FROM days_back) 
SELECT Result = Dateadd(year, [email protected], month_date) 
FROM month_back 
+0

这个逻辑我可以使用,但最大的战斗如何拆分字符串像需要从12年11个月10天分开几个月天 –

+0

@YashShukla - 更新我的答案从字符串提取值 –

+0

是的,像这样现在我们可以分开数字与第一空间,但我的价值是一个单一的字符串,所以有什么办法可以从单独的字符串中分离出来,如单独的年份月份和日期与“1年2个月2天”。你非常接近.. –

0
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, [email protected], @today_to_before) 
Set @today_to_before = dateadd(mm, [email protected], @today_to_before) 
Set @today_to_before = dateadd(dd, [email protected], @today_to_before) 
Select @date,@today_to_after,@today_to_before 
+0

是这是我想要的,但只有一个改变istead开始日期,我们可以把当前日期作为参考,然后减去它来计算日期? –

+0

@YashShukla你应该能够自己处理这个小调整? –

+0

我am.Not没有经验的sql –