Mysql st是/。因此,调用substring_index(c1,“/”,-1)将从给定的dir路径返回文件名
接下来,我们可以使用Mysql st是/。因此,调用substring_index(c1,“/”,-1)将从给定的dir路径返回文件名,mysql,sql,database,sql-like,dirname,Mysql,Sql,Database,Sql Like,Dirname,接下来,我们可以使用locate查找文件名的位置索引,并使用substr获取文件名开头的子字符串 要获取文件名,请执行以下操作: 从t1中选择子串索引(c1,“/”,-1) 要获取具有完整路径的目录名,请执行以下操作: 从t1中选择子串(c1,1,locate(子串_索引(c1,“/”,-1),c1)-1) 要仅获取目录名,请执行以下操作: 从t1中选择子串索引(子串(c1,1,locate)(子串索引(c1,“/”,-1),c1)-2),“/”,-1) 因此,在更新后的查询中,您的案例将如下所
locate
查找文件名的位置索引,并使用substr
获取文件名开头的子字符串
要获取文件名,请执行以下操作:
从t1中选择子串索引(c1,“/”,-1)代码>
要获取具有完整路径的目录名,请执行以下操作:
从t1中选择子串(c1,1,locate(子串_索引(c1,“/”,-1),c1)-1)代码>
要仅获取目录名,请执行以下操作:
从t1中选择子串索引(子串(c1,1,locate)(子串索引(c1,“/”,-1),c1)-2),“/”,-1)代码>
因此,在更新后的查询中,您的案例将如下所示:
插入tbl\u转码(文件id)
从tbl_文件中选择文件id,其中UPPER(文件路径)=UPPER(子字符串索引(子字符串(源路径,1,定位(子字符串索引(源路径,“/”,-1),源路径)-2),“/”,-1))和媒体类型=“视频”代码>
检查fiddle以获得一个工作示例如果我的理解正确,您正在收集每个文件的目录名,而不是文件目录的完整路径
下面的答案是针对Oracle的,我们使用了regexp\u substr
方法
要获得目录名为的完整路径,我们可以使用以下命令
正则表达式:
要仅获取目录名,我们可以使用以下正则表达式
表达方式:
这里的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';
您还可以检查SQLFIDLE
更新(针对MySQL的答案):
我们可以利用MySQL中的substring\u index
,locate
&substring
方法来实现目录名的提取
substring\u index
方法从字符的出现次数返回子字符串。这里感兴趣的字符是/
。因此,调用substring_index(c1,“/”,-1)
将从给定的dir路径返回文件名
接下来,我们可以使用locate
查找文件名的位置索引,并使用substr
获取文件名开头的子字符串
要获取文件名,请执行以下操作:
从t1中选择子串索引(c1,“/”,-1)代码>
要获取具有完整路径的目录名,请执行以下操作:
从t1中选择子串(c1,1,locate(子串_索引(c1,“/”,-1),c1)-1)代码>
要仅获取目录名,请执行以下操作:
从t1中选择子串索引(子串(c1,1,locate)(子串索引(c1,“/”,-1),c1)-2),“/”,-1)代码>
因此,在更新后的查询中,您的案例将如下所示:
插入tbl\u转码(文件id)
从tbl_文件中选择文件id,其中UPPER(文件路径)=UPPER(子字符串索引(子字符串(源路径,1,定位(子字符串索引(源路径,“/”,-1),源路径)-2),“/”,-1))和媒体类型=“视频”代码>
检查fiddle中的一个工作示例I实际使用sql查询时,在orale中使用的语法有什么不同吗?我试过了但没什么好事发生,返回一个错误#1582-调用本机函数'instr'时参数计数不正确我想要的是这样的我有一个数据库列,它存储了完整的路径,如下所示/mnt/HD/HD\u a2/mymusic/sample.mp3
,但我只需要获取它的dirname,而不包括这样的basename/mnt/HD/HD_a2/mymusic
@Amboom您在使用MySQL吗?某些SQL查询和方法的语法在数据库之间会发生变化。我实际上使用SQL查询,在orale中使用的语法有什么不同吗?我试过了但没什么好事发生,返回一个错误#1582-调用本机函数'instr'时参数计数不正确我想要的是这样的我有一个数据库列,它存储了完整的路径,如下所示/mnt/HD/HD\u a2/mymusic/sample.mp3
,但我只需要获取它的dirname,而不包括这样的basename/mnt/HD/HD_a2/mymusic
@Amboom您在使用MySQL吗?某些SQL查询和方法的语法在数据库之间会发生变化。我实际上使用SQL查询,在orale中使用的语法有什么不同吗?我试过了但没什么好事发生,返回一个错误#1582-调用本机函数'instr'时参数计数不正确我想要的是这样的我有一个数据库列,它存储了完整的路径,如下所示/mnt/HD/HD\u a2/mymusic/sample.mp3
,但我只需要获取它的dirname,而不包括这样的basename/mnt/HD/HD_a2/mymusic
@Amboom您在使用MySQL吗?某些SQL查询和方法的语法在数据库之间会发生变化。我实际上使用SQL查询,在orale中使用的语法有什么不同吗?我试过了但没什么好事发生,返回一个错误#1582-调用本机函数'instr'时参数计数不正确我想要的是这样的我有一个数据库列,它存储了完整的路径,如下所示/mnt/HD/HD\u a2/mymusic/sample.mp3
,但我只需要获取它的dirname,而不包括这样的basename/mnt/HD/HD_a2/mymusic
@Amboom您在使用MySQL吗?某些SQL查询和方法的语法在数据库之间更改。
replace(regexp_substr(substr(REGEXP_SUBSTR(c1,'^(.*/)*'),0,instr(REGEXP_SUBSTR(c1,'^(.*/)*'),'/',-1)-1),'/[a-zA-Z_0-9]+$'),'/','')
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';