我需要突围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
但我不能先转换一个
答
你真的应该将日期存储为日期,而不是字符串。
使用的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 |
+------------+------------+