我的文件名如下: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
)。
我需要在C#或SQL Server中比较两个字符串:
abc 99 rep_DD_MM_YYYY_file_v-X.XX.zip
abc 99 rep_01_01_2012_file_v-1.00
获取位置DD
,MM
,YYYY
&值的摘录第二个字符串的XXX
然后将它们排列成YYYYMMDDXXX
格式,以比较哪一个是最新的。
任何人都可以建议我如何在C#或T-SQL中进行这种比较?
答案 0 :(得分:0)
您需要使用DateTime.ParseExact
解析两个字符串中的DateTime答案 1 :(得分:0)
可以使用正则表达式完成。由于我真的很喜欢正则表达式,我会提出另一种方法:
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);
答案 2 :(得分: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
答案 3 :(得分: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;
}
尽管如此,谢谢大家的回答。如果您有任何建议,请分享..