Oracle
 sql >> база данни >  >> RDS >> Oracle

SUBSTR() Функция в Oracle

В Oracle, SUBSTR() функцията връща подниз от даден низ.

SUBSTR() изисква поне два аргумента; низа и позицията, от която да се извлече поднизът. Той също така приема незадължителен трети аргумент, който ви позволява да укажете колко дълъг трябва да бъде поднизът.

SUBSTR() може да се разглежда и като група от функции. Има пет отделни функции; SUBSTR() , SUBSTRB() , SUBSTRC() , SUBSTR2() и SUBSTR4() . Всяка функция изчислява дължината по различен начин.

Синтаксис

Синтаксисът е така:

{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])

Където char е низът, position е началната позиция на подниза и substring_length е дължината на знаците за извличане.

Функциите изчисляват дължините, както следва:

Функция Изчислява дължината с помощта на…
SUBSTR() Символи, както са дефинирани от набора от входни знаци
SUBSTRB() Байтове
SUBSTRC() Пълни символи в Unicode
SUBSTR2() Кодови точки UCS2
SUBSTR4() Кодови точки UCS4

Пример

Ето един основен пример:

SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;

Резултат:

fat cat

В сравнение с SUBSTRB()

Този пример показва как резултатите могат да се различават в зависимост от това коя конкретна функция използвате и от набора от символи.

В този случай сравняваме SUBSTR() с SUBSTRB() :

SELECT 
    SUBSTR('Böyük yağlı pişik', 5) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5) AS SUBSTRB
FROM DUAL;

Резултат:

          SUBSTR           SUBSTRB 
________________ _________________ 
k yağlı pişik    ük yağlı pişik   

Можем да видим, че двете функции са върнали два различни резултата. Това е така, защото някои знаци в този низ използват два байта.

SUBSTR() функцията връща дължината в cсимволи, както е дефинирана от входния набор от знаци, докато SUBSTRB() функцията връща дължината в байтове .

Ако се върнем към оригиналния низ, резултатите са еднакви между двете функции:

SELECT 
    SUBSTR('Big fat cat', 5) AS SUBSTR,
    SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;

Резултат:

    SUBSTR    SUBSTRB 
__________ __________ 
fat cat    fat cat   

Това е така, защото този низ използва само един байт на знак и така дължината в байтове е същата като броя на знаците.

Дължина на подниз

Ето пример, който определя дължината на подниз за извличане:

SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;

Резултат:

fat

И ето сравнение между SUBSTR() и SUBSTRB() когато указвате дължината на многобайтови знаци:

SELECT 
    SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
FROM DUAL;

Резултат:

      SUBSTR    SUBSTRB 
____________ __________ 
k yağlı p    ük yağl    

Нулева позиция

Една странност на тази функция е, че подаване на позиция 0 дава същия резултат като предаването на 1 :

SELECT 
    SUBSTR('Big fat cat', 0, 3) AS "0",
    SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;

Резултат:

     0      1 
______ ______ 
Big    Big   

Отрицателна позиция

Посочването на отрицателна стойност за позицията кара началната позиция да се брои назад от края на низа:

SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;

Резултат:

cat

И всяка посочена дължина се брои от тази позиция напред:

SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;

Резултат:

fat

Нулеви аргументи

Ако някой (или всички) от аргументите са null , резултатът е null :

SET NULL 'null';
SELECT 
    SUBSTR(null, 3, 3) AS r1,
    SUBSTR('Coffee', null, 3) AS r2,
    SUBSTR('Coffee', 3, null) AS r3,
    SUBSTR(null, null, null) AS r4
FROM DUAL;

Резултат:

     R1      R2      R3      R4 
_______ _______ _______ _______ 
null    null    null    null   

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Неправилен брой аргументи

Извикване на SUBSTR() без подаване на аргументи води до грешка:

SELECT SUBSTR()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT SUBSTR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

И предаването на твърде много аргументи също води до грешка:

SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL
Error at Command Line : 1 Column : 36
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверя дали стойността на DataReader не е нула?

  2. Как мога да изпълня собствен SQL скрипт в JPA/Hibernate?

  3. Агентът е блокиран

  4. Одит в Oracle

  5. Има ли разлика между !=и <> в Oracle Sql?