代码之家  ›  专栏  ›  技术社区  ›  Michal aquasan

MySQL分割单元值

  •  1
  • Michal aquasan  · 技术社区  · 4 年前

    我有以下MySQL代码,它(对于每一行)应该取列的值 Cislo 然后更新当前行,设置列 西斯洛 和 Nazov 到 SUBSTRING s的当前值。

    比如说现在 Cislo = 12345LoremIpsum 和 Nazov='' ,更新后应该是 Cislo=12345 和 Nazov=LoremIpsum .

    我尝试了很多不同的方法,但是结果总是空的。

    UPDATE `skladovekartyvyrobok00001` SET 
        `Cislo`= SUBSTRING(`Cislo`,0,5),
        `Nazov`= SUBSTRING(`Cislo`,5)
        WHERE `ID`=31;
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   Bill Karwin    4 年前

    https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring 说:

    值为0表示 pos 返回一个空字符串。

    换句话说,子字符串位置是基于1的,而不是基于0的。

        2
  •  1
  •   D-Shih    4 年前

    第二个参数 SUBSTRING 一开始可能是 1 而不是 0

    此函数的任何形式的pos都可以使用负值。pos的值为0时返回空字符串。

    然后你可以使用一个小技巧来更新 Nazov 列,然后更新 Cislo

    我想你可以试试这个。

    UPDATE `skladovekartyvyrobok00001` SET 
        `Nazov`= SUBSTRING(`Cislo`,6),
        `Cislo`= SUBSTRING(`Cislo`,1,5)
        WHERE `ID`=31;
    

    sqlifddle