Oracle / SQL到SQL Server的翻译

时间:2015-08-14 19:42:40

标签: sql sql-server oracle

我在 MS SQL Server 工作,我从未使用过 PLSQL ,但我最近收到了一位同事的代码(见下文):

substr(Field1, 1, 8)||'*'||SUBSTR(Field1, 10, 1)

我可以照顾substr - > substring有点容易,但我对||'*'||的含义/做法感到迷茫;它是连接,还是我还没有想到的其他东西?

3 个答案:

答案 0 :(得分:1)

Oracle中的||运算符(以及@a_horse_with_no_name注释 - 标准ANSI)SQL确实是字符串之间的连接运算符。在MS SQL Server的SQL中,您只需使用+。所以翻译将是:

SUBSTRING(Field1, 1, 8) + '*' + SUBSTRING(Field1, 10, 1)

答案 1 :(得分:1)

就像@MarcB说它是串联的,|| {string here} ||相当于SQL Server中的+concat()

substring(Field1, 1, 8)+ '*' + substring(Field1, 10, 1)

答案 2 :(得分:0)

  

连接两个字符串的结果是另一个字符   串。如果两个字符串都是数据类型CHAR,则结果为   数据类型CHAR,限制为2000个字符。如果是任一字符串   数据类型为VARCHAR2,结果具有数据类型VARCHAR2并且是有限的   到4000个字符。如果任一参数是CLOB,则结果为a   临时CLOB。字符串中的尾随空格由保留   连接,无论字符串或CLOB的数据类型如何。

     

在大多数平台上,连接运算符是两个实心垂直   条形图,如表4-3所示。但是,一些IBM平台使用了破解   此运算符的垂直条。在两者之间移动SQL脚本文件时   具有不同字符集的系统,例如ASCII和   EBCDIC,垂直条可能无法转换为垂直条   目标Oracle数据库环境所需的。 Oracle提供   CONCAT字符函数作为垂直条的替代   对于难以或无法控制的情况的操作员   由操作系统或网络实用程序执行的转换。使用   此功能在将在环境之间移动的应用程序中   具有不同的字符集。

     

虽然Oracle将零长度字符串视为空值,   将零长度字符串与另一个操作数连接起来   总是导致另一个操作数,所以null只能来自   两个空字符串的串联。但是,这可能不会继续下去   在Oracle数据库的未来版本中都是如此。连接一个   表达式可能为null,使用NVL函数显式   将表达式转换为零长度字符串。

source

要获得更清晰的源代码,您可以考虑使用CONCAT

这是帖子about perfomance