从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

得到位置DDMMYYYY&第二个字符串的CCD_ 10,然后将它们排列成CCD_。

请有人建议我如何在C#或T-SQL中进行比较?

从C#或SQL Server中的字符串中获取特定格式的字符串

您需要使用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;
    }

不过,谢谢大家的回答。如果你有什么建议,请分享。。