Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
如何将postgreSQL代码转换为Oracle SQL_Sql_Regex_Oracle - Fatal编程技术网

如何将postgreSQL代码转换为Oracle SQL

如何将postgreSQL代码转换为Oracle SQL,sql,regex,oracle,Sql,Regex,Oracle,我在postgreSQL中有几行代码,我想用它们来查询具有相同表和列的Oracle数据库 但是,postgres代码在sql developer中不起作用,并返回一个错误。代码如下所示: SELECT * FROM file WHERE file_name IS NOT NULL AND file_name ~ '[\u0000-\u001f]|^$|^ | | $'; 及 我在转换代码的~和正确(文件名,-1)部分以在sql developer中运行它们时遇到问题 非常感谢您的帮助 而不是

我在postgreSQL中有几行代码,我想用它们来查询具有相同表和列的Oracle数据库

但是,postgres代码在sql developer中不起作用,并返回一个错误。代码如下所示:

SELECT * FROM file WHERE file_name IS NOT NULL 
AND file_name ~ '[\u0000-\u001f]|^$|^ | | $';

我在转换代码的~和正确(文件名,-1)部分以在sql developer中运行它们时遇到问题


非常感谢您的帮助

而不是Postgres的
right()
您需要使用Oracle的
而不是
~
(区分大小写的正则表达式,如operator),使用
'c'
作为3d参数的函数(尽管可以省略,但表示区分大小写):


与Postgres的
right()
不同,您需要使用Oracle的
而不是
~
(区分大小写的正则表达式,如operator),使用
'c'
作为3d参数的函数(尽管可以省略,但表示区分大小写):

Postgres中带有否定参数的
right()
很少使用。但是Oracle中的等效方法是
substr(x,2)
,因此一种方法是:

SELECT *
FROM file 
WHERE file_name IS NOT NULL AND
      REGEXP_LIKE(CASE WHEN file_name LIKE '\\%' THEN substr(file_name, 2) 
                       ELSE file_name 
                  END), '^[.]|[.]$');
但是,我会在两个数据库中使用一个正则表达式:

WHERE REGEXP_LIKE(file_name, '^(\\)?[.]|[.]$');
在进行这种类型的正则表达式匹配时,我认为使用
case
没有任何好处。与
NULL
的比较是多余的。

right()
在Postgres中带有否定参数的情况很少使用。但是Oracle中的等效方法是
substr(x,2)
,因此一种方法是:

SELECT *
FROM file 
WHERE file_name IS NOT NULL AND
      REGEXP_LIKE(CASE WHEN file_name LIKE '\\%' THEN substr(file_name, 2) 
                       ELSE file_name 
                  END), '^[.]|[.]$');
但是,我会在两个数据库中使用一个正则表达式:

WHERE REGEXP_LIKE(file_name, '^(\\)?[.]|[.]$');
在进行这种类型的正则表达式匹配时,我认为使用
case
没有任何好处。与
NULL
的比较只是多余的