2017-05-04 76 views
-2

我需要一個字符串的轉換一些援助自定義字符串轉換

它應該能夠將字符串轉換左右逢源

  • 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); 
    } 
+1

定義轉換規則。嘗試用VBA字符串函數(例如'Mid $()')實現它們。如果您有特定的問題/疑問,請在此處詢問。但就目前而言,這個問題並不適用於SO。 [問] – Andre

+0

你需要展示你迄今爲止的嘗試,並解釋在所有情況下控制轉換的邏輯規則。 –

+0

你可以用VBA函數做到這一點,這個函數可以從SQL查詢中調用(我猜它是你自從你標記SQL以來想要的)。是否可以擴展一些邏輯?如果你放棄前兩個數字(10),你的字符串總是有相同的長度? –

回答

0

隨着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