mysql 从存储在数据库中的完整路径中提取目录名

ee7vknir  于 2023-01-25  发布在  Mysql
关注(0)|答案(2)|浏览(163)

如何从存储在数据库中的完整路径中只提取目录名。
我需要将扫描文件插入到另一个表中,该表将仅按目录名进行筛选。
例如
1./mnt/高清/高清_a2/观看我的视频. mp3

  • /mnt/HD/HD_a2/mymusic/sample.mp3
  • 存储在tbl_files中的完整路径

INSERT INTO tbl_transcode (file_id) Select file_id from tbl_files where UPPER(file_path) Like CONCAT((Select source_path from tbl_transcode_folder where trancode_folder_id = 1 ),'%') and media_type = 'video'
但是我只需要dirname来插入tbl_transcode,我认为LIKE不好用。
例如,我只想搜索这个/mnt/HD/HD_a2/Watch Me.mp3的目录名,但当我使用/mnt/HD/HD_a2%时,它会像这样返回我。其中还显示了其他目录名。
1./mnt/高清/高清_a2/观看我的视频. mp3

  1. /mnt/HD/HD_a2/mymusic/sample.mp3
mkshixfv

mkshixfv1#

如果我的理解是正确的,您收集的是每个文件的目录名,而不是文件目录的完整路径。
以下答案特定于Oracle,其中我们使用regexp_substr方法。
要获取包含目录名的完整路径,我们可以使用以下正则表达式:

substr(REGEXP_SUBSTR(c1,'^(.*/)*'),0,instr(REGEXP_SUBSTR(c1,'^(.*/)*'),'/',-1)-1)

要只获取目录名,我们可以使用以下正则表达式:

replace(regexp_substr(substr(REGEXP_SUBSTR(c1,'^(.*/)*'),0,instr(REGEXP_SUBSTR(c1,'^(.*/)*'),'/',-1)-1),'/[a-zA-Z_0-9]+$'),'/','')

这里的c1是我在这里使用的示例列。
因此,您的更新查询将如下所示:

INSERT INTO tbl_transcode (file_id) 
Select file_id from tbl_files where UPPER(file_path) = upper(substr(REGEXP_SUBSTR(source_path,'^(.*/)*'),0,instr(REGEXP_SUBSTR(source_path,'^(.*/)*'),'/',-1)-1)) and media_type = 'video';

您还可以检查此sqlfiddle

更新(针对MySQL的答案):

我们可以利用MySQL中的substring_indexlocatesubstring方法来实现目录名的提取。
substring_index方法从字符出现的次数返回子字符串,这里我们感兴趣的字符是/,所以调用substring_index(c1,'/',-1)会从给定的目录路径返回文件名。
接下来,我们可以使用locate查找文件名位置的索引,并使用substr获取文件名开始处的子字符串。
要获取文件名:
SELECT substring_index(c1,'/',-1) FROM t1;
要获取包含完整路径的目录名:
x1米11米1x
要仅获取目录名:
SELECT substring_index(substring(c1,1,locate(substring_index(c1,'/',-1),c1)-2),'/',-1) FROM t1;
因此,在更新查询您的情况下将如下所示:
INSERT INTO tbl_transcode (file_id) Select file_id from tbl_files where UPPER(file_path) = upper(substring_index(substring(source_path,1,locate(substring_index(source_path,'/',-1),source_path)-2),'/',-1)) and media_type = 'video';
检查这个小提琴的工作示例

rjee0c15

rjee0c152#

对我有效:

REGEXP_SUBSTR(file_path, '.*/.*?')

我觉得这可能有用,就试了一下。我以为我知道为什么,但当我开始解释时,我意识到没有理由。

相关问题