2017-07-14 54 views
0

日期:我需要突围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

你真的应该将日期存储为日期,而不是字符串。

使用的isnull()nullif(),和datename()的组合,以产生字符串,可以是convert() ED(在MDY格式反正):

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 | 
+------------+------------+