【问题标题】:Oracle SQL substrOracle SQL 子字符串
【发布时间】:2012-10-02 01:44:42
【问题描述】:

我有两张桌子:

Employee(empNo, lName, fName, sex, dob, address, deptno, position)
Zip(city, state, zipcode)

在Employee表中,地址是这样存储的:55 Maple Ln., AL 55555

是的,我知道这是存储地址的最可怕的方式,但这是我无法控制的。

我需要在查询中返回 empNo、lName、fName、地址的街道部分、州部分、城市和邮政编码。这是我正在使用的,我在让它正常工作时遇到了一点困难:

SELECT empNo, lName, fName,
    substr(Address,0, INSTR(Address,',')-1) AS streetAddr,
    city,
    substr(Address, INSTR(Address,',')+2,2) AS stateAddr,
    substr(Address,-5) AS zipC
FROM Employee
    JOIN Zip z ON z.zipcode = zipC
WHERE deptNo = '124';

我得到的错误是在 JOIN 语句上; zipC 是无效标识符。我的问题是我试图通过表的邮政编码部分加入员工和邮编。我只需要这样做,我就可以摆脱邮政编码的城市。

编辑#1

我也试过这个:

SELECT e.empNo, e.lName, e.fName,
    substr(e.Address,0, INSTR(e.Address,',')-1) AS streetAddr,
    z.city,
    substr(e.Address, INSTR(e.Address,',')+2,2) AS stateAddr,
    substr(e.Address,-5) AS zipC
FROM Employee e, Zip z
WHERE deptNo = '124';

【问题讨论】:

  • JOIN Zip z ON z.zipcode = substr(employee.Address,-5)

标签: sql oracle substr


【解决方案1】:
SELECT empNo, lName, fName,
    substr(Address,0, INSTR(Address,',')-1) AS streetAddr,
    city,
    substr(Address, INSTR(Address,',')+2,2) AS stateAddr,
    substr(Address,-5) AS zipC
FROM Employee
    JOIN Zip z ON z.zipcode = substr(Address,-5)
WHERE deptNo = '124';

即不要在连接中使用别名。

如果有任何前导或尾随空格的危险,您可能还需要在确定 INSTR 或 substr 之前修剪()您的地址值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 2019-02-06
    • 2021-04-14
    • 2020-12-06
    • 2018-03-14
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多