从C#或SQL Server中的字符串中获取特定格式的字符串
本文关键字:字符串 定格 格式 获取 Server SQL | 更新日期: 2023-09-27 18:19:56
我的文件名类似于: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
&第二个字符串的CCD_ 10,然后将它们排列成CCD_。
请有人建议我如何在C#或T-SQL中进行比较?
您需要使用DateTime.ParseExact 从两个字符串中解析DateTime
这可以用regex完成。既然我真的很讨厌regex,我将提出另一种方法:
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);
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
"DD"、"YYYY/YY、"MMM/MM"的位置可能会有所不同。所以我需要更复杂的日期解析器。
我现在使用的解析器:
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;
}
不过,谢谢大家的回答。如果你有什么建议,请分享。。