W Cat - Справка по SQL

Тут можно читать онлайн W Cat - Справка по SQL - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-db. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Справка по SQL
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.63/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

W Cat - Справка по SQL краткое содержание

Справка по SQL - описание и краткое содержание, автор W Cat, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Справка по SQL - читать онлайн бесплатно полную версию (весь текст целиком)

Справка по SQL - читать книгу онлайн бесплатно, автор W Cat
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

SELECT name FROM Ships WHERE PATINDEX('%sh%', name) 0

А вот, например, как можно найти имена кораблей, которые содержат последовательность из трех символов, первый и последний из которых есть "e":

SELECT name FROM Ships WHERE PATINDEX('%e_e%', name) 0

Результат выполнения этого запроса выглядит следующим образом:

name

Revenge

Royal Sovereign

Парная к LEFTфункция RIGHTвозвращает заданное число символов справа из строкового выражения:

Вот, например, как можно определить имена кораблей, которые начинаются и заканчиваются на одну и ту же букву:

SELECT name FROM Ships WHERE LEFT(name, 1) = RIGHT(name, 1)

То, что в результате мы получим пустой результирующий набор, означает, что таких кораблей в базе данных нет. Давайте возьмем комбинацию значений - класс и имя корабля.

Соединение двух строковых значений в одно называется конкатенацией, и в SQL Serverдля этой операции используется знак "+" (в стандарте "||"). Итак,

SELECT * FROM (

SELECT class +' '+ name AS cn FROM Ships

) x

WHERE LEFT(cn, 1)=RIGHT(cn, 1)

Здесь мы разделяем пробелом имя класса и имя корабля. Кроме того, чтобы не повторять всю конструкцию в качестве аргумента функции, используем подзапрос. Результат будет иметь вид:

cn

Iowa Missouri

North Carolina Washington

А если строковое выражение будет содержать лишь одну букву? Запрос выведет ее. В этом легко убедиться, написав

SELECT * FROM (

SELECT class +' '+ name AS cn FROM Ships

UNION ALL

SELECT 'a' as nc

) x

WHERE LEFT(cn, 1)=RIGHT(cn, 1)

, которая возвращает число символов в строке. Ограничимся случаем, когда число символов больше единицы:

SELECT * FROM (

SELECT class +' '+ name AS cn FROM Ships

UNION ALL

SELECT 'a' as nc

) x

WHERE LEFT(cn, 1)=RIGHT(cn, 1) AND LEN(cn)1

Замечание. Реализация этой функции в MS SQL Server имеет одну особенность, а именно, при подсчете длины не учитываются концевые пробелы.

Действительно, выполним следующий код:

DECLARE @chr AS CHAR(12), @vchr AS VARCHAR(12)

SELECT @chr = 'abcde' + REPLICATE(' ', 5), @vchr = 'abcde'+REPLICATE(' ', 5)

SELECT LEN(@chr), LEN(@vchr)

SELECT DATALENGTH(@chr), DATALENGTH(@vchr)

5

5

12

10

Функция REPLICATEдополняет константу 'abcde' пятью пробелами справа, которые не учитываются функцией LEN, - в обоих случаях получаем 5.

Функция DATALENGTHвозвращает число байтов в представлении переменной и демонстрирует нам различие между типами CHAR и VARCHAR. DATALENGTHдаст нам 12 для типа CHAR и 10 - для VARCHAR.

Как и следовало ожидать, DATALENGTHдля переменной типа VARCHAR вернула фактическую длину переменной. Но почему для переменной типа CHAR результат оказался равным 12? Дело в том, что CHAR - это тип фиксированной длины . Если значение переменной оказывается меньше ее длины, а длину мы объявили как CHAR(12), то значение переменной будет "выровнено" до требуемой длины за счет добавления концевых пробелов.

На сайте имеются задачи, в которых требуется упорядочить (найти максимум и т.д.) в числовом порядке значения, представленные в текстовом формате. Например, номер места в самолете ("2d") или скорость CD ("24x"). Проблема заключается в том, что текст сортируется так (по возрастанию)

11a

1a

2a

Действительно,

SELECT '1a' AS place

UNION ALL SELECT '2a'

UNION ALL SELECT '11a'

ORDER BY 1

Если же требуется упорядочить места в порядке возрастания рядов, то порядок должен быть такой

1a

2a

11a

Чтобы добиться такого порядка, нужно выполнить сортировку по числовым значениям, присутствующим в тексте. Можно предложить такой алгоритм:

1. Извлечь число из строки.

2. Привести его к числовому формату.

3. Выполнить сортировку по приведенному значению.

Т.к. нам известно, что буква только одна, то для извлечения числа из строки можно воспользоваться следующей конструкцией, которая не зависит от числа цифр в номере места:

LEFT(place, LEN(place)-1)

Если только этим и ограничиться, то получим

place

1a

11a

2a

Приведение к числовому формату может быть следующим:

CAST (LEFT(place, LEN(place)-1) AS INT)

Осталось выполнить сортировку

SELECT * FROM (

SELECT '1a' AS place

UNION ALL SELECT '2a'

UNION ALL SELECT '11a'

) x

ORDER BY CAST(LEFT(place, LEN(place)-1) AS INT)

Что и требовалось доказать.

Ранее мы для извлечения числа из текстовой строки пользовались функцией LEFT, т.к. нам было известно априори, какое число символов нужно убрать справа (один). А если же нужно извлечь строку из подстроки не по известной позиции символа, а по самому символу? Например: извлечь все символы до первой буквы "х" (значение скорости CD).

В этом случае мы можем использовать также уже рассмотренную ранее функцию CHARINDEX, которая позволит определить неизвестную позицию символа:

SELECT model, LEFT(cd, CHARINDEX('x', cd) -1) FROM PC

Функция SUBSTRING

SUBSTRING (< выражение , < начальная позиция , < длина )

Эта функция позволяет извлечь из выражения его часть заданной длины, начиная от заданной начальной позиции. Выражение может быть символьной или бинарной строкой, а также иметь тип textили image. Например, если нам потребуется получить 3 символа в названии корабля, начиная со 2-го символа, то сделать без помощи функции SUBSTRING будет не так просто. А так мы пишем:

SELECT name, SUBSTRING(name, 2, 3) FROM Ships

В случае, когда нужно извлечь все символы, начиная с некоторого, мы также можем использовать эту функцию. Например,

SELECT name, SUBSTRING(name, 2, LEN(name)) FROM Ships

даст нам все символы в названиях кораблей от второй буквы в имени. Обратите внимание на то, что для указания числа извлекаемых символов я использовал функцию LEN(name), которая возвращает число символов в имени. Понятно, что поскольку мне нужны символы, начиная со второго, то их число будет меньше общего количества символов в имени. Однако это не вызывает ошибки, поскольку если указанное число символов превышает возможное число, то будут извлечены все символы до конца строки. Поэтому я и беру их с запасом, не утруждая себя вычислениями.

Функция REVERSE

Эта функция переворачивает строку, как бы читая ее справа налево. Т.е. результатом запроса

SELECT REVERSE('abcdef')

будет 'fedcba'. Если бы в языке отсутствовала функция RIGHT, то запрос

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


W Cat читать все книги автора по порядку

W Cat - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Справка по SQL отзывы


Отзывы читателей о книге Справка по SQL, автор: W Cat. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x