代码之家  ›  专栏  ›  技术社区  ›  linuxatico

如何在mysql中获取左子字符串

  •  2
  • linuxatico  · 技术社区  · 10 年前

    这看起来很奇怪,但我找不到一个快速简单的方法来解决我的任务:

    我有许多具有不同绝对路径的行,例如:

    • /application/themes/openbank/images/prettyPhoto/light_square/default_thumbnail.gif
    • /application/themes/openbank/images/default_thumbnail.png
    • /应用程序/主题/openbank/images/prettyPhoto/light_square/a_s.pdf

    我想把他们分开

    • parent_path(“例如/application/themes/openbank/images/prettyPhoto/light_square/”)
    • 文件名(“例如default_thumbnail.gif”)

    注意:文件名的长度和分隔符的数量是可变的。

    具有

    SUBSTRING_INDEX('/application/themes/openbank/images/prettyPhoto/light_square/default_thumbnail.gif', '/', -1)
    

    我正确获取了文件名, 但我找不到找回左边部分的方法。 我尝试了LEFT()、RIGHT(),然后 all other mysql's string function 没有成功

    亚麻酸

    3 回复  |  直到 10 年前
        1
  •  3
  •   Ronak Shah    10 年前

    在下面尝试获取parent_path

    select reverse(substring(reverse('/application/themes/openbank/images/prettyPhoto/light_square/default_thumbnail.gif'),instr(reverse('/application/themes/openbank/images/prettyPhoto/light_square/default_thumbnail.gif'),'/')))
    
        2
  •  2
  •   Brian Ridgeway    10 年前
    select substr( path, 1, instr(path, substring_index( path, '/', -1)) - 1 ) as "PARENT_PATH", substring_index(path, '/', -1 ) as "FILE_NAME" from table1;
    
        3
  •  1
  •   VMai    10 年前

    另一种方式是将LEFT、SUBSTRING_INDEX和CHAR_LENGTH组合: 我的解决方案采用字符串的左侧部分,长度=长度(绝对路径)-长度(文件部分)。

    SET @content = '/application/themes/openbank/images/prettyPhoto/light_square/default_thumbnail.gif';
    SELECT 
        LEFT(
           @content, 
           CHAR_LENGTH(@content) - CHAR_LENGTH(SUBSTRING_INDEX(@content, '/', -1))
        );
    

    请参阅以下三个开头的答案 this fiddle .

    我相信还有其他一些方法可以达到预期的效果。