我已经开始在Oracle中使用SUBSTR和INSTR,但是遇到这个问题时我感到困惑。
SELECT PHONE, SUBSTR(PHONE, 1, INSTR(PHONE, '-') -1)
FROM DIRECTORY;
所以我知道SUBSTR切断了值,而INSTR显示了发生的位置,但是我上面放置的示例使我感到困惑,因为结果为362。当我的原始值为362-127-4285时。这是如何运作的?
答案 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