日期:
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
但我无法转换第一个
答案 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 |
+------------+------------+