Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql st是/。因此,调用substring_index(c1,“/”,-1)将从给定的dir路径返回文件名_Mysql_Sql_Database_Sql Like_Dirname - Fatal编程技术网

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';