首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Oracle代码转换为TSQL

将Oracle代码转换为TSQL
EN

Stack Overflow用户
提问于 2016-05-12 04:00:38
回答 2查看 63关注 0票数 0

我正在尝试将Oracle (PLSQL)代码转换为使用SQL Server 2012数据库。我正在转换Oracle NVL 2函数。我在SQL中看到错误,isNULL需要2个参数。

我尝试转换的Oracle是:

代码语言:javascript
复制
CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
      THEN Nvl2(d.phonearea,To_Char(d.phonearea)||'/','')||' '||SubStr(To_Char(d.phonenbr ),1,3)||'-'||SubStr(d.phonenbr,-4)

我已经修改了SQL,如下所示:

代码语言:javascript
复制
CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
       THEN ISNULL((d.phonearea,CAST(d.phonearea AS char)+'/','')+' '+SubString(CAST(d.phonenbr AS char),1,3)+'-'+SubString(d.phonenbr,-4))

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2016-05-12 04:22:54

Oracle的NVL2(expr1, expr2, expr3转换为标准SQL的CASE WHEN expr1 IS NOT NULL THEN expr2 ELSE expr3 END

代码语言:javascript
复制
CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
      THEN CASE WHEN d.phonearea IS NOT NULL
                THEN To_Char(d.phonearea)||'/' 
                ELSE ''
           END ||' '||SubStr(To_Char(d.phonenbr ),1,3)||'-'||SubStr(d.phonenbr,-4)
...
票数 0
EN

Stack Overflow用户

发布于 2016-05-12 05:09:02

我想这就是你想要的。。。或者至少接近:

代码语言:javascript
复制
(CASE WHEN LTrim(Rtrim(appointtype1)) IN ('PRO', 'NOA')
      THEN COALESCE(d.phonearea + '/', '') + STUFF(d.phonenbr, 3, 0, '-') 
 END)

备注:

  • 这假设phoneareaphonenbr是字符串,而不是数字(无论如何,将这样的值存储为字符串都是很好的做法)。
  • 如果它们是数字,则使用CAST()CONVERT()。但是,记住要包括VARCHAR()的长度。SQL Server有默认的VARCHAR()长度,您不希望依赖于默认长度。
  • STUFF()函数可用于在电话号码的第三个字符后插入连字符。我想这就是你想要的逻辑,

  • ,你可能需要注意大小写。对于大多数字符串操作,SQL Server (默认情况下)不区分大小写,但Oracle区分大小写。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37172216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档