我需要在SQL Server中将日期分解为日期作为列

时间:2017-07-14 22:36:03

标签: sql-server

日期:

3/25/2017
3/12-3/18
3/19-3/25

我使用过这个SQL语句:

Select  
    SUBSTRING ('3/12-3/18' , 1 , CHARINDEX('-','3/12-3/18') -1) + '/' + Convert(varchar, DATEPART(yyyy,Getdate())) as StartDate,
    SUBSTRING ('3/12-3/18' , CHARINDEX('-','3/12-3/18') + 1 , len('3/12-3/18')) + '/' + Convert(varchar, DATEPART(yyyy,Getdate())) as EndDate

但我无法转换第一个

1 个答案:

答案 0 :(得分:1)

您确实应该将日期存储为日期,而不是字符串。

使用isnull()nullif()datename()的组合生成可以convert()编辑的字符串(无论如何都采用MDY格式):< / p>

create table t ([date] varchar(32));
insert into t values ('3/25/2017'),('3/12-3/18'),('3/19-3/25');

select 
    startdate = convert(date,isnull(
        left(t.date,nullif(charindex('-',t.date)-1,-1))+'/'+datename(year,getdate())
      , t.date))
  , enddate   = convert(date,isnull(
        right(t.date,len(t.date)-nullif(charindex('-',t.date),0))+'/'+datename(year,getdate())
      , t.date))
from t;

rextester演示:http://rextester.com/WFO41395

返回:

+------------+------------+
| startdate  |  enddate   |
+------------+------------+
| 2017-03-25 | 2017-03-25 |
| 2017-03-12 | 2017-03-18 |
| 2017-03-19 | 2017-03-25 |
+------------+------------+