我正在将DB2 SQL转换为Microsoft TSQL语法。
DB2的CONCAT函数与我需要转换的TSQL完全不同。
示例问题...这些都是合法的语法示例:
CONCAT ( sample1.ColumnName, sample2.ColumnName)
转换为:
sample1.ColumnName + sample2.ColumnName
sample1.ColumnName CONCAT sample2.ColumnName
转换为
sample1.ColumnName + sample2.ColumnName
sample1.ColumnName || sample2.ColumnName
转换为
sample1.ColumnName + sample2.ColumnName
CONCAT ( sample1.ColumnName, TRIM(sample2.ColumnName))
转换为
sample1.ColumnName + TRIM(sample2.ColumnName)
CONCAT ( sample1.ColumnName, sample3.ColumnName CONCAT TRIM(sample2.ColumnName))
转换为
sample1.ColumnName + sample3.ColumnName + TRIM(sample2.ColumnName)
CONCAT ( CONCAT(sample1.ColumnName, sample4.ColumnName), sample3.ColumnName CONCAT TRIM(sample2.ColumnName))
转换为
sample1.ColumnName + sample4.ColumnName + sample3.ColumnName + TRIM(sample2.ColumnName)
拥有递归正则表达式会很好。如果只处理替换模式的外部或内部实例,我可以打多个电话。
我最喜欢的是CONCAT ( value1, value2 )
的版本
我可以识别CONCAT (
。如何确定value1, value2
和结束)
的正确实例?
如果可以的话,可以放下CONCAT (
和)
。我可以退回value1 + "+" + value2
。
如果可以定义这种情况,我可以推断出所需的其他公式,知道如何指定必要的组。
答案 0 :(得分:0)
我觉得我会采用与标题中所述相同的方法。首先,删除字符串前面的所有内容,并删除所有紧随其后的圆括号,这些圆括号后没有另一个圆括号。我将匹配以下内容,并替换为空:
^CONCAT.*CONCAT\s*\( | ^Concat (?:Symbol )?as inline | \)(?!\))
然后,进行第二次替换以查找逗号,字符串CONCAT
或一组双竖线||
并将其替换为加号:
\s*(?: , | CONCAT | \|\| )\s*
答案 1 :(得分:0)
将db2连接到另一个。
在定位时执行('Concat(',mystring)= 0 将conat(blah,blah)转换为blah ||等等 循环
确保它仍然可以在db2上使用并且您还没有损坏任何东西。
转换||到+