Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
SQL/Regex挑战/难题:如何从SQL代码中删除注释(通过使用SQL查询)? 要求 应删除单行注释(例如--my comment) 应删除多行注释(例如/*我的注释*/) 应忽略字符串文本的内容(例如“这是一条多行注释:/*我的注释*/”) 标识符的内容(例如“--column 1--”)应被忽略 文字和标识符_Sql_Regex_Oracle_Comments_Teradata - Fatal编程技术网

SQL/Regex挑战/难题:如何从SQL代码中删除注释(通过使用SQL查询)? 要求 应删除单行注释(例如--my comment) 应删除多行注释(例如/*我的注释*/) 应忽略字符串文本的内容(例如“这是一条多行注释:/*我的注释*/”) 标识符的内容(例如“--column 1--”)应被忽略 文字和标识符

SQL/Regex挑战/难题:如何从SQL代码中删除注释(通过使用SQL查询)? 要求 应删除单行注释(例如--my comment) 应删除多行注释(例如/*我的注释*/) 应忽略字符串文本的内容(例如“这是一条多行注释:/*我的注释*/”) 标识符的内容(例如“--column 1--”)应被忽略 文字和标识符,sql,regex,oracle,comments,teradata,Sql,Regex,Oracle,Comments,Teradata,文字和标识符可以跨越多行 单行注释 单行注释可能是代码的最后一个元素,并且可能不会以换行结束 嵌套多行注释 在SQL Server和PostgreSQL等数据库中,可以嵌套多行注释,例如- /* outer comment /* inner comment */ */ 以下代码无效,因为只有内部注释关闭: /* opened outer comment /* closed inner comment */ 在Teradata、Oracle、MySql和SQLite等数据库中,没有嵌套注释的概

文字和标识符可以跨越多行

单行注释 单行注释可能是代码的最后一个元素,并且可能不会以换行结束

嵌套多行注释 在SQL Server和PostgreSQL等数据库中,可以嵌套多行注释,例如-

/* outer comment /* inner comment */ */
以下代码无效,因为只有内部注释关闭:

/* opened outer comment /* closed inner comment */
在Teradata、Oracle、MySql和SQLite等数据库中,没有嵌套注释的概念。 以下代码无效,因为注释已用最左边的*/结束

/* comment /* is closed */ ERROR */
但是,这是一个有效代码:

/* comment /* still the same comment */
解决 Teradata

with t (txt) as 
(
select     '
            select    /* comment /* yada yada yada /* / // bla bla bla  
                        1
                                    */ t1.i
                   ,''"SRC''''"''    as "This''is''the
                                ''source"

            from      t1 /* "Comment 2" - '' */ cross join t2 -- /* comment 3 */

            where     t2.v = ''/*DST"*
                                /'' -- comment 4'
)

select    regexp_replace (txt,'(''.*?''|".*?")|/\*.*?\*/|--.*?(?=[\r\n]|$)','\1',1,0,'n')     as clean_txt

from      t
;
Oracle

with t (txt) as 
(
select     '
            select    /* comment /* yada yada yada /* / // bla bla bla  
                        1
                                    */ t1.i
                   ,''"SRC''''"''    as "This''is''the
                                ''source"

            from      t1 /* "Comment 2" - '' */ cross join t2 -- /* comment 3 */

            where     t2.v = ''/*DST"*
                                /'' -- comment 4'

from        dual
)

select    regexp_replace (txt,'(''.*?''|".*?")|/\*.*?\*/|--.*?(?=$|\Z)','\1',1,0,'nm')

from      t
;
结果
这不是一个问题。StackOverflow是一个问答网站。通过问一个问题使您的帖子合法化,我如何从SQL查询中删除注释?并将此作为答案发布。回答你自己的问题是非常体面的,但你必须遵守StackOverflow机制。或者,给自己写一个博客。谢谢你的澄清
            select     t1.i
                   ,'"SRC''"'    as "This'is'the
                                'source"

            from      t1  cross join t2 

            where     t2.v = '/*DST"*
                                /'