我MS SQL服务器工作,我从来没有用过PLSQL,但我最近收到的代码行从同事(见下文):的Oracle/SQL到SQL Server翻译
substr(Field1, 1, 8)||'*'||SUBSTR(Field1, 10, 1)
我可以很轻松地处理substr
- >substring
位,但我失去了什么||'*'||
的意思/确实;它是串联还是我还没有想到的其他东西?
我MS SQL服务器工作,我从来没有用过PLSQL,但我最近收到的代码行从同事(见下文):的Oracle/SQL到SQL Server翻译
substr(Field1, 1, 8)||'*'||SUBSTR(Field1, 10, 1)
我可以很轻松地处理substr
- >substring
位,但我失去了什么||'*'||
的意思/确实;它是串联还是我还没有想到的其他东西?
Oracle中的||
运算符(以及@a_horse_with_no_name注释 - 标准ANSI)SQL确实是字符串之间的concatination运算符。在MS SQL Server的SQL中,您只需使用+
。所以翻译是:
SUBSTRING(Field1, 1, 8) + '*' + SUBSTRING(Field1, 10, 1)
连接两个字符串的结果是另一个字符 字符串。如果两个字符串的数据类型都是CHAR,则结果为 数据类型为CHAR,并且限制为2000个字符。如果任一字符串是数据类型为VARCHAR2的 ,则结果具有数据类型VARCHAR2,并且将 限制为4000个字符。如果其中一个参数是CLOB,则结果是一个 临时CLOB。无论字符串或CLOB的数据类型如何,字符串中的尾随空白均由 级联保留。
在大多数平台上,连接运算符是两个实心垂直 条,如表4-3所示。但是,某些IBM平台为此操作员使用了断开的 竖条。当在具有不同字符集的系统(例如ASCII和 EBCDIC)之间移动 系统之间的SQL脚本文件时,竖线可能不会被转换为目标Oracle数据库环境所需的竖线 。 Oracle提供 CONCAT字符函数作为竖线 操作符的替代方法,用于操作系统或网络实用程序难以或不可能控制 转换时的情况。在应用程序中使用 此功能将在具有不同字符集的环境 之间移动。
尽管Oracle把零长度字符串作为空值, 串接一个零长度字符串与另一操作数 总是导致其它操作数,所以空只能从 级联两个空字符串的结果。但是,在未来版本的Oracle数据库中,这可能不会延续到 。要连接可能为空的 表达式,请使用NVL函数明确地 将表达式转换为零长度字符串。
为了有一个更清晰的源代码,你可以考虑使用CONCAT
这是一个后about perfomance
它的串联。 –
根据上下文的不同,一个问题是Oracle将零长度的VARCHAR和NULL视为同义词,有时会表现为空洞,有时不行。在Oracle中'null ||'*''产生''*'',而在SQL Server上'null +'*''将产生'null'。根据子字符串返回null的机会,您可能会在'coalesce(substring(...),'')'中包装以在SQL Server上获得类似的行为。 –
你的问题中没有PL/SQL代码。 –