【问题标题】:Custom String Conversion自定义字符串转换
【发布时间】:2017-05-04 09:48:34
【问题描述】:

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

例子

  • 1090512300 到 9.5.123
  • 1090501300 到 9.5.13

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

转换逻辑如下 1 xx yy zzz 00
所以字符串 1 将是 1xxyyzzz00 和字符串 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);
    }

【问题讨论】:

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

标签: c# sql vba ms-access


【解决方案1】:

对于 MSAccess,我可能会使用 MIDCINTCSTR

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

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多