有没有办法在 Oracle、Postgres 和 SQL Server 中使用通用运算符进行连接。
在 Oracle 和 Postgres 中,我们使用||
而 SQL Server 使用+
.
我通过添加自定义运算符+
来支持字符串连接解决了 Postgres 中的问题。
有没有办法在 Oracle 中添加相同的运算符以使用该运算符支持字符串连接+
。
有没有办法在 Oracle、Postgres 和 SQL Server 中使用通用运算符进行连接。
在 Oracle 和 Postgres 中,我们使用||
而 SQL Server 使用+
.
我通过添加自定义运算符+
来支持字符串连接解决了 Postgres 中的问题。
有没有办法在 Oracle 中添加相同的运算符以使用该运算符支持字符串连接+
。
||
是 SQL 标准连接运算符(请参阅 SQL 2008:5.2)。使用它,如果它在您使用的系统中不起作用,请抱怨;-)
不过说真的,你应该让其他系统使用||
,而不是+
. 它不仅更标准,而且如果使用 更容易意外引起混淆+
,尤其是在必须推断任何类型或发生隐式转换的情况下。
考虑:'5' + 2
如果您使用的系统没有在该系统上引发错误,并且+
意味着加号和串联,那么您可能会遇到一些令人困惑的结果。
您不能在 Oracle 中重载运算符。"+" 重载无论如何都不起作用,因为 Oracle 会进行自动类型转换 ('1'+'1'=2)。
Oracle 使用的连接运算符是||
,它也符合 ANSI。
还有一个CONCAT
功能(从 postgres 9.0 和 SQL Server 2012 开始)被您需要的所有三个 RDBMS 支持。
请注意,Oracle 版本CONCAT
不像其他两个那样是可变参数的。如果您需要连接三个或更多字符串,则需要嵌套:
CONCAT(s1,CONCAT(s2,s3))
||
当然可以在 Oracle 中使用,但显然不是 SQL Server。(对于那些追随我们的人,这里是 SQL 的玫瑰石:SQL 方言参考)
如果您正在修复 SQL 脚本,我会考虑以下解决方案:
前:
sql-shell-command < sql-file.sql
(sql 文件包含 '+' 运算符)
后:
ansi-sql-shell-command < sql-file.sql
sed -e 's/||/\+/' < sql-file.sql | ms-sql-shell-command
(sql-file 包含||
操作符,你必须转换你的文件)
这个想法是您从一种格式的 SQL 开始,对于特殊情况,您对其运行过滤器以将其转换为另一种格式。从理论上讲,您可以将所有+
es 转换为||
s,但由于其中很大一部分可能是数字加法而不是字符串连接,因此这不太可能也有效。
过滤器的复杂性取决于您在做什么。如果您的 SQL 中有任意数据,那么您必须获取它以避免替换字符串。但是,如果您正在设置视图,它可能会很好。
您可以在 SQL 位于字符串中的程序中使用相同的技术——在程序中编写一个函数以将其从一种形式转换为另一种形式。