Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
用于mysql、mssql和oracle的相同SQL连接操作器_Mysql_Sql_Sql Server_Oracle_Plsql - Fatal编程技术网

用于mysql、mssql和oracle的相同SQL连接操作器

用于mysql、mssql和oracle的相同SQL连接操作器,mysql,sql,sql-server,oracle,plsql,Mysql,Sql,Sql Server,Oracle,Plsql,我试图对上述三个DBMS使用相同的sql语句。。但问题是它涉及字符串连接,但在每个dbms中有不同的连接操作方式。。但是我想要一个接线员。。需要他人的帮助您可以在应用程序代码中绕过此问题,方法是在sql语句中使用一个用于连接的占位符,然后将其替换为您正在使用的rdbms的正确样式: select {conpre} myfield1 {conmid} myfield2 {conmid} myfield3 {conend} from mytable 然后在伪代码中: if rdbms is s

我试图对上述三个DBMS使用相同的sql语句。。但问题是它涉及字符串连接,但在每个dbms中有不同的连接操作方式。。但是我想要一个接线员。。需要他人的帮助

您可以在应用程序代码中绕过此问题,方法是在sql语句中使用一个用于连接的占位符,然后将其替换为您正在使用的rdbms的正确样式:

select {conpre} myfield1 {conmid} myfield2 {conmid} myfield3 {conend}
  from mytable
然后在伪代码中:

if rdbms is sqlserver
    conpre = ""
    conmid = " + "
    conend = ""
else if rdbms is mysql
    conpre = "concat("
    conmid = ", "
    conend = ")"
else if rdbms is oracle
    conpre = ""
    conmid = " || "
    conend = ""
else if
    ' etc...
end if

stmt = replace(stmt, "{conpre}", conpre)
stmt = replace(stmt, "{conmid}", conmid)
stmt = replace(stmt, "{conend}", conend)

您可以在应用程序代码中绕过此问题,方法是在sql语句中使用一个用于连接的占位符,然后将其替换为您正在使用的rdbms的正确样式:

select {conpre} myfield1 {conmid} myfield2 {conmid} myfield3 {conend}
  from mytable
然后在伪代码中:

if rdbms is sqlserver
    conpre = ""
    conmid = " + "
    conend = ""
else if rdbms is mysql
    conpre = "concat("
    conmid = ", "
    conend = ")"
else if rdbms is oracle
    conpre = ""
    conmid = " || "
    conend = ""
else if
    ' etc...
end if

stmt = replace(stmt, "{conpre}", conpre)
stmt = replace(stmt, "{conmid}", conmid)
stmt = replace(stmt, "{conend}", conend)

我不会为这个问题编写自己的解决方案,而是使用已有的多数据库工具之一。如果你曾经遇到过这个问题,你很快就会再次遇到它


我与以下内容无关,但您可以尝试

我会避免编写您自己的问题解决方案,并使用现有的多数据库工具之一。如果你曾经遇到过这个问题,你很快就会再次遇到它


我与以下内容无关,但你可以试试看。这个问题的简单答案似乎是否定的

然而

如果在Oracle中创建包dbo会怎么样? 在mysql中,是否也可以在单独的数据库dbo中创建名为concat的函数,以便使用语法dbo.concat(a、b、c)调用函数

不幸的是,mysql不支持默认参数(除非最近更改)或函数重载,因此您必须为每个参数创建on函数:

混凝土2(s1、s2)

混凝土3(s1、s2、s3)


等等。

这个问题的简单答案似乎是否定的

然而

如果在Oracle中创建包dbo会怎么样? 在mysql中,是否也可以在单独的数据库dbo中创建名为concat的函数,以便使用语法dbo.concat(a、b、c)调用函数

不幸的是,mysql不支持默认参数(除非最近更改)或函数重载,因此您必须为每个参数创建on函数:

混凝土2(s1、s2)

混凝土3(s1、s2、s3)


等等。

有一种方法可以使用ODBC转义序列来实现这一点

SELECT {fn concat (col1, {fn concat (col2, col3)})}
FROM YourTable

因此,在SQL Server和MySQL中可以很好地工作,但对于Oracle来说,这取决于连接方法。

有一种使用ODBC转义序列的方法

SELECT {fn concat (col1, {fn concat (col2, col3)})}
FROM YourTable

因此,在SQL Server和MySQL中可以很好地工作,但Oracle依赖于连接方法。

MySQL:

   SELECT CONCAT('New ', 'York ', 'City');
SELECT 'The city' + ' is ' + 'Paris';
产出为:纽约市

甲骨文:

SELECT 'The city' || ' is ' || 'Paris' FROM dual;
输出是:城市是巴黎

 SELECT CONCAT('The city', ' is ', 'Paris');
SQL Server:

   SELECT CONCAT('New ', 'York ', 'City');
SELECT 'The city' + ' is ' + 'Paris';
输出是:城市是巴黎

 SELECT CONCAT('The city', ' is ', 'Paris');

输出为:城市是巴黎

MySQL:

   SELECT CONCAT('New ', 'York ', 'City');
SELECT 'The city' + ' is ' + 'Paris';
 SELECT CONCAT('The city', ' is ', 'Paris');
产出为:纽约市

甲骨文:

SELECT 'The city' || ' is ' || 'Paris' FROM dual;
输出是:城市是巴黎

 SELECT CONCAT('The city', ' is ', 'Paris');
SQL Server:

   SELECT CONCAT('New ', 'York ', 'City');
SELECT 'The city' + ' is ' + 'Paris';
输出是:城市是巴黎

 SELECT CONCAT('The city', ' is ', 'Paris');

输出结果是:巴黎城不太可能发生,但您正在尝试/想要的一个例子将有助于Denali使用
CONCAT
函数,但在此之前,在TSQL中,您一直使用
+
是否可以在sql server中定义CONCAT函数。。与mysql中的CONCAT相同,oracle@ahmedsaud-否。SQL Server中的所有用户定义函数都需要以架构作为前缀,这样您就可以定义
CONCAT
函数,但需要将其称为
dbo.CONCAT
。此外,UDF不能获取可变长度的参数列表。您在这里运气不好。虽然MySQL可以配置为遵循ANSI标准,并使用
|
作为连接运算符(就像Oracle和几乎所有其他SQL数据库一样),但无法说服SQL Server遵守标准,但是,您正在尝试/想要的一个示例将有助于Denali使用
CONCAT
函数,但在此之前,在TSQL中,您一直使用
+
是否可以在sql server中定义CONCAT函数。。与mysql中的CONCAT相同,oracle@ahmedsaud-否。SQL Server中的所有用户定义函数都需要以架构作为前缀,这样您就可以定义
CONCAT
函数,但需要将其称为
dbo.CONCAT
。此外,UDF不能获取可变长度的参数列表。您在这里运气不好。尽管MySQL可以配置为遵循ANSI标准并使用
| |
作为连接运算符(就像Oracle和几乎所有其他SQL数据库一样),但无法说服SQL Server遵守标准。。。这不是我所期望的答案,好像这是。。那么我为什么不在编程中处理这个问题呢..你的“问题”的正确答案是
。我想我会提供另一个建议来帮助你。我想这是可能的。看看我的答案。对不起。。。这不是我所期望的答案,好像这是。。那么我为什么不在编程中处理这个问题呢..你的“问题”的正确答案是
。我想我会提供另一个建议来帮助你。我想这是可能的。看看我的答案。@a_马_没有名字-我不知道确切的答案。在SQL Server中,连接似乎是不可知的。您可以在定义中使用它创建一个存储过程,它在文本本身中使用
fn concat
为它缓存一个计划,而不是在到达SQL Server之前由驱动程序重写。我可能会在dba.stackexchange.com上发布一个关于它的问题later@a_horse_with_no_name-我不太清楚。在SQL Server中,连接似乎是不可知的。您可以在定义中使用它创建一个存储过程,它会在文本本身中使用
fn concat
为它缓存一个计划,而不是由驱动程序重写
 SELECT CONCAT('The city', ' is ', 'Paris');