C# 自定义字符串转换

C# 自定义字符串转换,c#,sql,vba,ms-access,C#,Sql,Vba,Ms Access,我想转换一个可以有两种格式的字符串 范例 1090512300至9.5.123 1090501300至9.5.13 第一个字符串(1090512300)将始终具有相同的长度,但第二个字符串(9.5.123)将不具有相同的长度 转换逻辑如下1 xx yy zzz 00 因此,字符串1将是1xYYZZZ00,字符串2将是xx.yy.zzz,其中所有零都已删除 我尝试使用数字格式,但由于字符串2每次的长度都不相同,因此无法正常工作 1\00\0\0000\0\0 我更喜欢一个SQL函数,可以执行

我想转换一个可以有两种格式的字符串

范例

  • 1090512300至9.5.123
  • 1090501300至9.5.13
第一个字符串(1090512300)将始终具有相同的长度,但第二个字符串(9.5.123)将不具有相同的长度

转换逻辑如下1 xx yy zzz 00
因此,字符串1将是1xYYZZZ00,字符串2将是xx.yy.zzz,其中所有零都已删除

我尝试使用数字格式,但由于字符串2每次的长度都不相同,因此无法正常工作

1\00\0\0000\0\0
我更喜欢一个SQL函数,可以执行这种转换,但我不知道如何做到这一点

我用C#编写了以下代码

如何将其转换为VBA或SQL

private static void Main(string[] args)
    {
        oldToNew("7.1.14");
        oldToNew("9.5.123");
        oldToNew("9.5.13");
        oldToNew("12.1.10");
        oldToNew("12.10.10");
        Console.ReadLine();

        NewToOld("1050126000");
        NewToOld("1060104900");
        NewToOld("1060105000");
        NewToOld("1070414200");
        Console.ReadLine();
    }
    static public void oldToNew(string Code)
    {
        string a, b, c, manCode;
        manCode = Code;
        a = manCode.Substring(0, manCode.IndexOf("."));
        manCode = manCode.Remove(0, manCode.IndexOf(".") + 1);
        b = manCode.Substring(0, manCode.IndexOf("."));
        manCode = manCode.Remove(0, manCode.IndexOf(".") + 1);
        c = manCode.Substring(0);
        a = Convert.ToInt16(a).ToString("D2");
        b = Convert.ToInt16(b).ToString("D2");
        c = Convert.ToInt16(c).ToString("D3");

        manCode = "1" + a + b + c + "00";
        Console.WriteLine("Converted \t" + Code + "\t\t:\t" + manCode);
    }

    static public void NewToOld(string Code)
    {
        string a, b, c, manCode;
        manCode = Code;
        manCode = manCode.Remove(0, 1);
        a = Convert.ToInt16(manCode.Substring(0, 2)).ToString();
        manCode = manCode.Remove(0, 2);
        b = Convert.ToInt16(manCode.Substring(0, 2)).ToString();
        manCode = manCode.Remove(0, 2);
        c = Convert.ToInt16(manCode.Substring(0, 3)).ToString();
        manCode = a + "." + b + "." + c;
        Console.WriteLine("Converted \t" + Code + "\t:\t" + manCode);
    }

对于MSAccess,我可能会使用
MID
CINT
CSTR

SELECT cStr(cInt(Mid(OldFormat, 2, 2))) + "." +
       cStr(cInt(Mid(OldFormat, 4, 2))) + "." + 
       cStr(cInt(Mid(OldFormat, 6, 3))) As NewFormat
FROM TableName

定义转换规则。尝试使用VBA字符串函数实现它们(例如,
Mid$()
)。如果您有具体的问题,请在此处提问。但就目前情况而言,这个问题并不适合这样做。您需要显示到目前为止的尝试,并解释在所有情况下控制转换的逻辑规则。您可以使用VBA函数实现这一点,该函数将从SQL查询中调用(我猜这是您想要的,因为您标记了SQL)。你能在逻辑上再扩展一点吗?如果删除前2个数字(10),字符串的长度是否始终相同?