在SQL Server中将字符串转换为日期
我面临一个问题,需要将字符串转换为日期,如 在SQL Server中,11年10个月12天后的某个日期在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) -
请帮忙,任何帮助都将不胜感激。我想你想要这样的东西
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