SUBSTR和INSTR SQL Oracle

时间:2018-12-31 21:44:22

标签: sql oracle function

我已经开始在Oracle中使用SUBSTR和INSTR,但是遇到这个问题时我感到困惑。

SELECT PHONE, SUBSTR(PHONE, 1, INSTR(PHONE, '-') -1)
FROM DIRECTORY;

所以我知道SUBSTR切断了值,而INSTR显示了发生的位置,但是我上面放置的示例使我感到困惑,因为结果为362。当我的原始值为362-127-4285时。这是如何运作的?

2 个答案:

答案 0 :(得分:2)

INSTR(PHONE, '-')-列中给出PHONE index ,在您的情况下为4
,然后为{{1 }}或SUBSTR(PHONE, 1, 4 - 1)
 给出SUBSTR(PHONE, 1, 3)PHONE列的{strong>子字符串,其长度为1st个字符,即3
如果362列的值为PHONE

答案 1 :(得分:0)

SELECT PHONE, SUBSTR(PHONE, 1, INSTR(PHONE, '-',1,1) -1)
FROM DIRECTORY;

INSTR(String,'char_Search','position from where start searching','occurance')

如果我们没有给出“起始位置”和“发生率” 默认情况下为1,1。

因此默认情况下它取为INSTR(phone,'-',1,1)--sql返回字符串'-'的第一次出现位置为4 然后是SUBSTR(PHONE,1,4-1),即SUBSTR(PHONE,1,3)。

SUBSTR(字符串,'开始位置','没有字符') SUBSTR(PHONE,1,3)-从第一行开始给出PHONE列的子字符串,其长度为3个字符,即362

  

Ex:使用此值-'362-127-4285'

SELECT '362-127-4285' Example,
SUBSTR('362-127-4285',1,INSTR('362-127-4285','-')-1) Result 
FROM DUAL