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