2012-01-11 16 views
0

abc 99 rep_DD_MM_YYYY_file_v-X.XX.zipのようなファイル名があります。DD_MM_YYYYは日付で、X.XXはバージョンです。 (例えば、abc 99 rep_01_01_2012_file_v-1.00)。のYYYY & XXX、位置DDMMの値のC#またはSQL Serverの文字列から特定の書式設定された文字列を取得

  • abc 99 rep_DD_MM_YYYY_file_v-X.XX.zip
  • abc 99 rep_01_01_2012_file_v-1.00

GETエキス:

は、私は2つの文字列C#またはSQL Serverで比較する必要があります2番目の文字列を入力して、YYYYMMDDXXX形式に並べ替えて、最新のものを比較します。

C#またはT-SQLでこの比較を行うにはどうすればよいですか?

+1

には常に "abc 00 rep"と "file"が含まれていますか? – ivowiblo

答えて

0

で両方の文字列からDateTimeのを解析する必要があります。私は本当に正規表現で吸うので、私は別の方法を提案します:

var day = fileName.SubString(11,2); 
var month = fileName.SubString(14,2); 
var year = fileName.SubString(17,4); 
var version = fileName.SubString(29,4); 

var result = String.Concat(year,month,day,version); 
+0

文字列インデックスの一部が間違っている可能性があります。私はあなたがソリューションのアイデアを得たと思う – ivowiblo

0
declare @filename varchar(50) 
set @filename = 'abc 99 rep_01_01_2012_file_v-1.00' 

declare @date varchar(10) 
select @date = substring(@filename, 12, 10) 
select @date 

declare @xxx varchar(10) 
select @xxx = replace(right(@filename,4),'.','') 
select @xxx 


select right(@date,4) + right(left(@date,5),2) + left(@date,2) + @xxx 
0

"DD"、 "YYYY/YY"、 "MM/MMM" の位置が異なる場合があります。だから私はより複雑な日付パーサーが必要です。

私が今使っているパーサ:

public void Main() 
    { 
     string name = "bmsa1110_v1.1.zip"; 
     string varPattern = "####YYMM##XXX####"; 

     getVarPart(name, varPattern); 
    } 

private string getVarPart(string name, string varPattern) 
    { 
     StringBuilder name_sb = new System.Text.StringBuilder(name); 
     StringBuilder varPattern_sb = new System.Text.StringBuilder(varPattern); 

     string YEAR = null; 
     string MONTH = null; 
     string DAY = null; 
     string VERSION = null; 

     for (int j = 0; j < varPattern_sb.Length; j++) 
     { 
      switch (varPattern_sb[j]) 
      { 
       case 'Y': 
        YEAR = YEAR + name_sb[j]; 
        name_sb[j] = '#'; 
        break; 
       case 'M': 
        MONTH = MONTH + name_sb[j]; 
        name_sb[j] = '#'; 
        break; 
       case 'D': 
        DAY = DAY + name_sb[j]; 
        name_sb[j] = '#'; 
        break; 
       case 'X': 
        VERSION = VERSION + name_sb[j]; 
        name_sb[j] = '#'; 
        break; 
       default: 
        break; 
      } 
     } 

     string varPart = YEAR + MONTH + DAY + VERSION; 
     return varPart; 
    } 

ものの、すべてのあなたの答えをありがとう。ご提案がありましたら、

関連する問題