2016-03-01 79 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 –