2017-07-14 9 views
0

日付列として日付を:私は、このSQL文を使用している私は、SQL Serverの日付を脱走する必要がある -

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

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

答えて

1

実際には、日付は文字列ではなく、日付として保存する必要があります。

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

戻り値:

(とにかく MDY形式) convert() EDとすることができる文字列を生成する isnull()nullif()、及び datename()の組み合わせを使用し

+------------+------------+ 
| startdate | enddate | 
+------------+------------+ 
| 2017-03-25 | 2017-03-25 | 
| 2017-03-12 | 2017-03-18 | 
| 2017-03-19 | 2017-03-25 | 
+------------+------------+ 
関連する問題