Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Строковые функции, возвращающие строки

SELECT emp_id | Правила операций с множествами | Старшинство операций с множествами | Gt; SELECT cust_id _> FROM account | Упражнения | Строковые данные | Создание строк | Специальные символы | Работа со строками | Gt; LENGTH(vchar_fld) varchar_length, _> LENGTH(text_fld) text_length |


Читайте также:
  1. A.1.2. Технология командной строки.
  2. ВАЖНО! В акте все строки ОБЯЗАТЕЛЬНО должны быть заполнены все данные! Никакие исправления в акте не допускаются.
  3. Введите две строки. В случае если они одинаковые. Выводится сообщение о том что строки совпали, в противном случае выводится сообщение, о том что строки не совпадают.
  4. Ввести с клавиатуры натуральное число. Проверить будут ли его цифры все различны. Вывести на экран сообщение. Преобразование строки в число производить в макрокоманде.
  5. Временные функции, возвращающие даты
  6. Временные функции, возвращающие строки
  7. Временные функции, возвращающие числа

 

В некоторых случаях требуется изменить имеющиеся строки – уда_ лить/добавить текстовый фрагмент. Для выполнения этих задач у ка_ ждого сервера БД есть множество функций. Прежде чем начать, еще раз возвратим данные таблицы string_tbl в исходное состояние:


 

132 Глава 7. Создание, преобразование и работа с данными

mysql> DELETE FROM string_tbl;

 

Query OK, 5 rows affected (0.00 sec)

 

mysql> INSERT INTO string_tbl (text_fld)

_> VALUES ('This string was 29 characters');

 

Query OK, 1 row affected (0.01 sec)

 

Ранее в этой главе было описано построение слов, включающих симво_ лы с диакритическими знаками, с помощью функции concat(). Функ_ ция concat() полезна и во многих других ситуациях, например, если требуется добавить в конец хранящейся строки дополнительные сим_ волы. В следующем примере строка в столбце text_fld изменяется пу_ тем добавления в ее конец дополнительной фразы:

 

mysql> UPDATE string_tbl

_> SET text_fld = CONCAT(text_fld, ', but now it is longer');

 

Query OK, 1 row affected (0.03 sec)

 

Rows matched: 1 Changed: 1 Warnings: 0

Теперь столбец text_fld содержит следующую строку:

 

mysql> SELECT text_fld

_> FROM string_tbl;

 

+_____________________________________________________+ | text_fld | +_____________________________________________________+ | This string was 29 characters, but now it is longer | +_____________________________________________________+ 1 row in set (0.00 sec)

 

Таким образом, как и все функции, возвращающие строку, concat() можно использовать для замещения данных, хранящихся в столбце символьного типа.

 

Другое традиционное применение функции concat() – построение стро_ ки из отдельных частей данных. Например, следующий запрос форми_ рует строку примечания для каждого операциониста банка:

 

mysql> SELECT CONCAT(fname, ' ', lname, ' has been a ',
_> title, ' since ', start_date) emp_narrative
_> FROM employee  
_> WHERE title = 'Teller' OR title = 'Head Teller';

 

+_________________________________________________________+ | emp_narrative | +_________________________________________________________+

| Helen Fleming has been a Head Teller since 2004_03_17 |
| Chris Tucker has been a Teller since 2004_09_15 |
| Sarah Parker has been a Teller since 2002_12_02 |
| Jane Grossman has been a Teller since 2002_05_03 |
| Paula Roberts has been a Head Teller since 2002_07_27 |
| Thomas Ziegler has been a Teller since 2000_10_23 |
| Samantha Jameson has been a Teller since 2003_01_08 |
| John Blake has been a Head Teller since 2000_05_11 |
| Cindy Mason has been a Teller since 2002_08_09 |

 

Строковые данные        
   
| Frank Portman has been a Teller since 2003_04_01 |
| Theresa Markham has been a Head Teller since 2001_03_15 |
| Beth Fowler has been a Teller since 2002_06_29 |
| Rick Tulman has been a Teller since 2002_12_12 |

 

+_________________________________________________________+ 13 rows in set (0.12 sec)

 

Функция concat() может обрабатывать любое выражение, возвращаю_ щее строку, и даже преобразует числа и даты в строковый формат, о чем свидетельствует столбец дат (start_date), используемый как ар_ гумент. Хотя Oracle Database включает функцию concat(), она может принимать только строковые аргументы, поэтому в Oracle предыду_ щий запрос работать не будет. В этом случае придется использовать оператор конкатенации (||), а не вызов функции:

 

SELECT fname || ' ' || lname || ' has been a ' || title || ' since ' || start_date emp_narrative

 

FROM employee

 

WHERE title = 'Teller' OR title = 'Head Teller';

 

В SQL Server нет функции concat(), поэтому используется такой же подход, что и в предыдущем примере, только с применением операто_ ра конкатенации SQL Server (+, а не ||).

 

Функция concat() полезна для добавления символов в начало или конец строки, но также позволяет ввести или заменить символы в середине строки. Все три сервера БД предоставляют специальные функции для этого, но все они разные, поэтому сначала рассмотрим функцию MySQL, а затем перейдем к функциям двух других серверов.

 

MySQL включает функцию insert(), которая принимает четыре аргу_ мента: исходную строку, начальное положение, число символов, тре_ бующих замены, и замещающую строку. В зависимости от значения третьего аргумента функция выполняет вставку либо замену символов строки. Если третий аргумент равен нулю, то замещающая строка вставляется со сдвигом всех последующих символов вправо, например:

 

mysql> SELECT INSERT('goodbye world', 9, 0, 'cruel ') string;

 

+_____________________+ | string | +_____________________+ | goodbye cruel world | +_____________________+ 1 row in set (0.00 sec)

 

В этом примере все символы, начиная с девятого, сдвигаются вправо, и вставляется строка 'cruel '. Если третий аргумент больше нуля, то замещающая строка замещает указанное количество символов, на_ пример:

 

mysql> SELECT INSERT('goodbye world', 1, 7, 'hello') string;

+_____________+


 

  Глава 7. Создание, преобразование и работа с данными
   
| string |

 

+_____________+ | hello world | +_____________+

 

1 row in set (0.00 sec)

В этом примере первые семь символов замещаются строкой 'hello'.

 

В Oracle Database нет единой функции, обладающей гибкостью in_ sert() MySQL, но в Oracle есть функция replace(), замещающая одну подстроку другой. Вот предыдущий пример, переработанный с ис_ пользованием replace():

 

SELECT REPLACE('goodbye world', 'goodbye', 'hello')

 

FROM dual;

Все экземпляры строки 'goodbye' будут замещены строкой 'hello'.

 

В результате получаем строку 'hello world'. Функция заместит все эк_ земпляры искомой строки замещающей строкой – будьте вниматель_ ны, чтобы не получить больше замещений, чем задумано.

 

В SQL Server есть и функция replace() с той же функциональностью, что и в Oracle, а также функция stuff() (заполнить), функциональные воз_ можности которой аналогичны функции insert() MySQL. Вот пример:

 

SELECT STUFF('hello world', 1, 5, 'goodbye cruel')

 

Во время выполнения этого запроса удаляются пять символов, начи_ ная с первой позиции, и на их место вставляется строка 'goodbye cru_ el'. В результате получаем строку 'goodbye cruel world'.

 

Кроме вставки символов в строку может понадобиться извлечь из стро_ ки подстроку. Для этого все три сервера включают функцию sub_ string() (подстрока) (правда, в Oracle Database эта функция называет_ ся substr()). Она извлекает указанное число символов, начиная с за_ данной позиции. В следующем примере из строки извлекается пять символов, начиная с девятой позиции:

 

mysql> SELECT SUBSTRING('goodbye cruel world', 9, 5);

 

+________________________________________+ | SUBSTRING('goodbye cruel world', 9, 5) | +________________________________________+

 

| cruel |

 

+________________________________________+

 

1 row in set (0.00 sec)

 

Кроме упомянутых, все три сервера включают множество других встроенных функций для работы со строковыми данными. Хотя на_ значение многих из них сугубо специальное, например формирование строкового эквивалента восьмеричных или шестнадцатеричных чи_ сел, есть и функции общего назначения, например удаляющие или до_ бавляющие пробелы в конце текстовой строки. Более подробную ин_ формацию можно получить в справочном руководстве по SQL для кон_


 

Числовые данные  
   

 

кретного сервера или универсальном справочнике по SQL, например «SQL in a Nutshell» (O’Reilly).

 


Дата добавления: 2015-08-17; просмотров: 67 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Gt; FROM string_tbl| Выполнение арифметических операций

mybiblioteka.su - 2015-2024 год. (0.01 сек.)