我正在尝试将Oracle (PLSQL)代码转换为使用SQL Server 2012数据库。我正在转换Oracle NVL 2函数。我在SQL中看到错误,isNULL需要2个参数。
我尝试转换的Oracle是:
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,如下所示:
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))我遗漏了什么?
发布于 2016-05-12 04:22:54
Oracle的NVL2(expr1, expr2, expr3转换为标准SQL的CASE WHEN expr1 IS NOT NULL THEN expr2 ELSE expr3 END
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)
...发布于 2016-05-12 05:09:02
我想这就是你想要的。。。或者至少接近:
(CASE WHEN LTrim(Rtrim(appointtype1)) IN ('PRO', 'NOA')
THEN COALESCE(d.phonearea + '/', '') + STUFF(d.phonenbr, 3, 0, '-')
END)备注:
phonearea和phonenbr是字符串,而不是数字(无论如何,将这样的值存储为字符串都是很好的做法)。CAST()或CONVERT()。但是,记住要包括VARCHAR()的长度。SQL Server有默认的VARCHAR()长度,您不希望依赖于默认长度。STUFF()函数可用于在电话号码的第三个字符后插入连字符。我想这就是你想要的逻辑,,
https://stackoverflow.com/questions/37172216
复制相似问题