0

我正在使用sql utility集成在Solaris 10. 我想在表中获取一列,但似乎我的 sql 实用程序不允许。

下面是我的代码

SELECT
    DBExternalAlarm.m_ObjectDN,
    INSTR(DBExternalAlarm.m_ObjectDN,'@@',30),
    SUBSTR(DBExternalAlarm.m_ObjectDN,1,INSTR(DBExternalAlarm.m_ObjectDN,'@@',30))
FROM DBExternalAlarm;

结果只有 2 个数据列

- DBExternalAlarm.m_ObjectDN
- INSTR(DBExternalAlarm.m_ObjectDN,'@@',30)

我不知道,任何机构都可以提供其他方法来解决这个问题。我可以使用变量或其他函数吗?

4

1 回答 1

0

我的猜测是您的结果集中返回了第三列,但它只是空字符串,因为@@从第 30 位开始没有找到。要检验这个假设,请使用以下查询:

SELECT
    DBExternalAlarm.m_ObjectDN,
    INSTR(DBExternalAlarm.m_ObjectDN,'@@',30),
    CASE WHEN INSTR(DBExternalAlarm.m_ObjectDN,'@@',30) > 0
         THEN SUBSTR(DBExternalAlarm.m_ObjectDN, 1,
             INSTR(DBExternalAlarm.m_ObjectDN,'@@',30))
         ELSE 'Not Found' END AS result
FROM DBExternalAlarm;

我不知道你的数据库,但是INSTR如果找不到字符串,Oracle 会返回 0。上面的CASE表达式对此进行检查并Not Found在这种情况下输出。如果你到处都看到这个,那么你就会知道没有匹配项。

于 2018-05-29T05:00:54.400 回答