Sql server 我需要在SQL Server中突破日期-日期为列
日期: 我使用了以下SQL语句: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'
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 |
+------------+------------+