Sql server 我需要在SQL Server中突破日期-日期为列

Sql server 我需要在SQL Server中突破日期-日期为列,sql-server,Sql Server,日期: 我使用了以下SQL语句: 3/25/2017 3/12-3/18 3/19-3/25 但我无法转换第一个日期,您真的应该将日期存储为日期,而不是字符串 使用isnull()、nullif()和datename()的组合来生成可以convert()编辑的字符串(无论如何都是MDY格式): rextester演示: 返回: create table t ([date] varchar(32)); insert into t values ('3/25/2017'),('3/12-3/18'

日期:

我使用了以下SQL语句:

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

但我无法转换第一个日期,您真的应该将日期存储为日期,而不是字符串

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

rextester演示:

返回:

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;
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;
+------------+------------+
| startdate  |  enddate   |
+------------+------------+
| 2017-03-25 | 2017-03-25 |
| 2017-03-12 | 2017-03-18 |
| 2017-03-19 | 2017-03-25 |
+------------+------------+