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

Как да извлечете подниз от низ в PostgreSQL/MySQL

Проблем:

Как да извлечете подниз от низ в PostgreSQL/MySQL

Пример 1:

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

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

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

Решение 1:

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

Друг синтаксис:

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

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

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

Дискусия:

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

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

SUBSTRING(email, 1, 7) ще върне поднизовете на стойностите в колоната на имейла, които започват от началото на низовете (първият знак) и продължават до седем знака. Другата нотация, SUBSTRING(email FROM 1 FOR 7) , прави точно същото. Аргументът след FROM е началният индекс и аргументът след FOR е дължината на подниз.

Третият аргумент на SUBSTRING() функцията е по избор. Ако го пропуснете, ще получите поднизът, който започва от индекса във втория аргумент и стига чак до края на низа. SUBSTRING(email, 1) ще върне целия низ, точно както SUBSTRING(email FROM 1) .

Пример 2:

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

Решение 2:

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

Друг синтаксис:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email)) AS substring
FROM emails;

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

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

Дискусия:

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

Ако искате поднизът да отиде чак до края на оригиналния низ, третият аргумент в SUBSTRING() функция (или FOR аргумент) не е необходим. В противен случай трябва да е дължината на подниза или можете да го изчислите с помощта на POSITION() функция. Може също да искате да извлечете подниз, който не завършва в края на низа, а с някакъв конкретен знак, например преди '.'. Ето един пример:

SELECT
  email,
  SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;

Друг синтаксис:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;

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

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

Частта POSITION('.' IN email) - POSITION('@' IN 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. JSON_ARRAY_INSERT() – Вмъкване на стойности в JSON масив в MySQL

  2. Как да създадете MySQL база данни и да зададете привилегии

  3. PHP MySQL Google Chart JSON - пълен пример

  4. MySQL срещу PDO

  5. Mysql:как да изберете групи с определени стойности?