文字和标识符可以跨越多行
单行注释可能是代码的最后一个元素,并且可能不会以换行符结尾。
在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 ;
select t1.i ,'"SRC''"' as "This'is'the 'source" from t1 cross join t2 where t2.v = '/*DST"* /'