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

Как да извлечете подниз от низ в Oracle/SQLite

Проблем:

Имате колона от низове и искате да получите поднизове от тях.

Пример 1:

В emails таблица, има колона за имейл. Искате да покажете първите седем знака от всеки имейл.

Таблицата изглежда така:

имейл
[email protected]
[email protected]
[email protected]
[email protected]

Решение 1:

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

Резултатът е:

имейл подниз
[email protected] jake99@
[email protected] тамараб
[email protected] notine@
[email protected] Джесика

Дискусия:

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

Внимавай! За разлика от някои други езици за програмиране, индексите започват от 1 , а не 0. Това означава, че първият знак има индекс 1, вторият знак има индекс 2 и т.н.

>SUBSTR(email, 1, 7) ще върне поднизовете на стойностите в колоната на имейла, които започват от първия знак и продължават до седем знака.

Пример 2:

Искате да покажете подниз между индекси 2 и 6 (включително).

Решение 2:

SELECT
  email,
  SUBSTR(email, 2, 5) AS substring
FROM emails;

Резултатът е:

имейл подниз
[email protected] ake99
[email protected] амара
[email protected] отине
[email protected] есси

Дискусия:

Използвате SUBSTR() функционира точно както в предишния пример. Този път вторият аргумент на функцията е 2, тъй като искаме да започнем от индекс 2. Дължината на поднизът е 5 (end_index - start_index + 1 ).

Пример 3:

Искате да покажете поднизът, който започва от знака @ и завършва в края на низа, но не знаете точните индекси или дължини.

Решение 3:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring
FROM emails;

Резултатът е:

имейл подниз
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Дискусия:

Използвате SUBSTR() функционира точно както в предишните примери. Този път търсите конкретен герой, чиято позиция може да варира от ред на ред. За да намерите индекса на конкретния знак, можете да използвате INSTR(column, character) функция, където колоната е литералният низ или колоната, от която искате да извлечете подниза, а символът е character от който искате да стартирате подниза (тук @ ).

Третият аргумент на SUBSTR() функцията е дължината на подниза. Можете да го изчислите с помощта на INSTR() и LENGTH() функции. Можете да направите това, като извадите индекса от дължината на колоната и след това добавите 1:

LENGTH(email) - INSTR(email, '@') + 1

Може също да искате да извлечете подниз, който не завършва в края на низа, а с някакъв конкретен знак, например преди '.' Ето как можете да направите това:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring
FROM emails;

Резултатът от тази заявка е:

имейл подниз
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Частта INSTR(email, '.') - INSTR(email, '@') просто изчислява дължината на подниза.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция TO_TIMESTAMP() в Oracle

  2. Oracle вмъкнете в table2, след което изтрийте от table1, изключение, ако не успеете

  3. Как да генерирам програмно DDL от базата данни на Oracle?

  4. Как да боравим с незадължителни параметри в SQL заявка?

  5. Oracle - Как да генерирам скрипт от sql разработчик