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

Как да извлечете подниз от низ в T-SQL

Проблем:

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

Пример 1:

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

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

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

Решение 1:

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

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

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

Дискусия:

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

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

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

Пример 2:

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

Решение 2:

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

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

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

Дискусия:

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

Пример 3:

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

Решение 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring
FROM emails;

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

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

Дискусия:

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

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

LEN(email) - CHARINDEX('@', email) + 1

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

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

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

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

Частта CHARINDEX('.', email) - CHARINDEX('@', 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. Преглед на командата DBCC SHRINKFILE

  2. Минимално регистриране с INSERT...SELECT в Heap Tables

  3. Проблеми с конфигурацията на регистъра на транзакциите

  4. Специални острови

  5. Проблеми с представянето:Първата среща