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

时间:2012-01-11 14:45:44

标签: c# sql-server format

我的文件名如下: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&值的摘录第二个字符串的XXX然后将它们排列成YYYYMMDDXXX格式,以比较哪一个是最新的。

任何人都可以建议我如何在C#或T-SQL中进行这种比较?

4 个答案:

答案 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;
    }

尽管如此,谢谢大家的回答。如果您有任何建议,请分享..