Проблем:
Имате колона от низове и искате да получите поднизове от тях.
Пример 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)
просто изчислява дължината на подниза.