Mysql

Строки mysql: Функции для работы со строками

Содержание

Символьные / строчные функции MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Функция & Описание
ASCII
Функция MySQL ASCII возвращает числовое значение самого левого символа строки.
CHAR_LENGTH
MySQL функция CHAR_LENGTH возвращает количство симолов указанной строки.
CHARACTER_LENGTH
MySQL функция CHARACTER_LENGTH возвращает длину указанной строки (измеряется в символах).
CONCAT
MySQL функция CONCAT позволяет объединять вместе два или более выражений.
CONCAT_WS
MySQL функция CONCAT_WS позволяет объединять два или более выражения вместе и добавляет разделитель между каждым конкатенированным выражением.
FIELD
MySQL функция FIELD возвращает позицию значения в списке значений (val1, val2, val3, …).
FIND_IN_SET
MySQL функция FIND_IN_SET возвращает позицию строки в списке строк, разделенных запятыми.
FORMAT
MySQL функция FORMAT форматирует число в формате ‘#, ###. ##’, округляя его до определенного количества десятичных знаков, а затем возвращает результат в виде строки.
INSERT
MySQL функция INSERT вставляет подстроку в строку в заданной позиции для определенного количества символов.
INSTR
MySQL функция INSTR возвращает позицию подстроки в строке.
LCASE
MySQL функция LCASE преобразует все символы в указанной строке в строчные. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
LEFT
MySQL функция LEFT извлекает подстроку из строки, начиная с самого левого символа.
LENGTH
MySQL функция LENGTH возвращает длину указанной строки (измеряется в байтах).
LOCATE
MySQL функция LOCATE возвращает местоположение первого вхождения подстроки в строку.
LOWER
MySQL функция LOWER преобразует все символы указанной строки в строчные (нижний регистр). Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
LPAD
MySQL функция LPAD возвращает строку, дополненную слева с указанной строкой до определенной длины.
LTRIM
MySQL функция LTRIM удаляет все пробелы из левой части строки.
MID
MySQL функция MID извлекает подстроку из строки.
POSITION
MySQL функция POSITION возвращает местоположение подстроки в строке.
REPEAT
MySQL функция REPEAT повторяет строку определенное количество раз.
REPLACE
MySQL функция REPLACE заменяет все вхождения указанной строки.
REVERSE
MySQL функция REVERSE возвращает строку с символами в обратном порядке.
RIGHT
MySQL функция RIGHT извлекает подстроку из строки, начиная с самого правого символа.
RPAD
MySQL функция RPAD возвращает строку, дополненную с правой стороны строкой до определенной длины.
RTRIM
MySQL функция RTRIM удаляет все пробелы из правой части строки.
SPACE
MySQL функция SPACE возвращает строку с указанным количеством пробелов.
STRCMP
MySQL функция STRCMP проверяет, совпадают ли две строки с текущим набором символов.
SUBSTR
MySQL функция SUBSTR извлекает подстроку из строки.
SUBSTRING
MySQL функция SUBSTRING извлекает подстроку из строки.
SUBSTRING_INDEX
MySQL функция SUBSTRING_INDEX возвращает подстроку из строки перед появлениям (number) вхождений разделителя (delim).
TRIM
MySQL функция TRIM удаляет все указанные символы либо из начала, либо из конца строки.
UCASE
MySQL функция UCASE преобразует все символы указанной строки в верхний регистр. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
UPPER
MySQL функция UPPER преобразует все символы указанной строки в верхний регистр. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.

Функция CONCAT — сложение строк при выборке

Функция CONCAT предназначена для сложения строк при выборке
из базы данных. Строками обычно выступают поля таблиц.

См. также функцию CONCAT_WS,
которая складывает строки с использованием разделителя.

См. также функцию GROUP_CONCAT,
которая складывает содержимое одного поля из разных строк.

Синтаксис

SELECT CONCAT(поле1, поле2...) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима23300
2Петя24400
3Вася25500

Пример

В данном примере при выборке из базы создается новое поле
concat, в котором одновременно сольются 3 поля — age, name и salary:

SELECT *, CONCAT(age, name, salary) as concat FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
age
возраст
salary
зарплата
concat
объединенное поле
1Дима2330023Дима300
2Петя2440024Петя400
3Вася2550025Вася500

Пример

Давайте добавим после name 3 восклицательных знака:

SELECT *, CONCAT(name, '!!!') as name FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима!!!23300
2Петя!!!24400
3Вася!!!25500

Пример

Давайте добавим перед name 3 восклицательных знака, а после него — 3 вопросительных:

SELECT *, CONCAT('!!!', name, '???') as name FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
age
возраст
salary
зарплата
1!!!Дима???23300
2!!!Петя???24400
3!!!Вася???25500

Выбрать определенную строку из таблицы MySQL

В идеале мне нужен запрос, эквивалентный

select * from customer where row_number() = 3

но это незаконно.

Я не могу использовать автоматическое приращение поля.

row_number () — это строка, которую необходимо выбрать.

Как мне это сделать?

EDIT: Ну, я использую iSql * plus для практики, и использование limit и auto_increment по какой-то причине незаконно. Я закончил создание последовательности и триггера и просто увеличил id на 1 каждый раз, когда там была запись.

18

автор: Matt O’Brien

6 ответов


можно использовать LIMIT 2,1 вместо WHERE row_number() = 3.

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

имейте в виду, что это индекс на основе 0. Итак, если вы хотите номер строки n, первый аргумент должен быть n-1. Второй аргумент всегда будет 1, потому что вы просто хочу один ряд. Например, если вы хотите номер строки 56 таблицы customer:

SELECT * FROM customer LIMIT 55,1

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

вот запрос, который будет работать, если поле, которое вы сравниваете с id

select * from customer where `id` = 3

SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;

вы можете получить набор данных из SQL, как это и заполнить его в структуру данных Java (как список), а затем сделать необходимую сортировку там. (возможно, с помощью сопоставимого интерфейса)


вы можете добавить автоматически сгенерированное поле id в таблицу и выбрать по этому id

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;

2

автор: user1135357


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

select * from customer order by id where row_number() = 3

(иногда таблицы MySQL отображаются с внутренним порядком, но вы не можете полагаться на это поведение). Тогда вы можете использовать LIMIT offset, row_count, со смещением на основе 0, поэтому номер строки 3 становится смещением 2:

select * from customer order by id
limit 2, 1

или вы можете использовать LIMIT row_count OFFSET offset:

select * from customer order by id
limit 1 offset 2

ваша таблица должна быть создана с уникальным полем ID, которое в идеале будет иметь атрибут AUTO_INCREMENT. пример:

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (P_Id)
)

затем вы можете получить доступ к 3-й записи в этой таблице с:

SELECT * FROM Persons WHERE P_Id = 3

1

автор: Luminous_Path


Эмуляция функции row_number() в MySQL

В этой статье я расскажу вам, как пронумеровать строки результата запроса, возвращаемого MySQL.

Функция row_number() – это функция ранжирования, возвращающая порядковый номер строки, начиная с 1 для первой строки. Номер строки часто бывает нужен при генерации отчётов. Эта функция реализована в MS SQL и в Oracle. В MySQL подобная функция отсутствует, но её несложно реализовать за счёт глобальных переменных.

Нумерация строк

Чтобы пронумеровать строки, мы должны объявить переменную запроса. Продемонстрируем этот подход на примере простой таблицы, содержащей список работников предприятия (employees). Следующий запрос выбирает 5 работников из таблицы, присваивая им номера по порядку, начиная с 1:

SET @row_number = 0;

SELECT 
    (@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
    employees
LIMIT 5;

В выше приведённом запросе мы:

  • Определили переменную row_number и инициализировали её нулевым значением;
  • Увеличивали её значение на 1 при каждой итерации запроса.

Другая техника, позволяющая достичь того же результата, заключается в создании вместо глобальной переменной производной таблицы и перекрёстном объединении этих двух таблиц. Пример такого запроса:

SELECT 
    (@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
    employees,(SELECT @row_number:=0) AS t
LIMIT 5;

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

Возобновление нумерации в группах

Как нам задать отдельную нумерацию для каждой группы строк, объединённых выражением ORDER BY или GROUP BY? Например, как имитировать следующий запрос:

SELECT
    customerNumber, paymentDate, amount
FROM
    payments
ORDER BY customerNumber;

Нам нужно сформировать список платежей, в котором каждому платежу будет соответствовать определённый порядковый номер. Для того чтобы получить требуемый результат, нам понадобятся две переменные: одна – с порядковым номером строки, другая – для хранения идентификатора клиента из предыдущей строки, чтобы сравнить его с текущим. Наш запрос будет выглядеть так:

SELECT 
    @row_number:=CASE
        WHEN @customer_no = customerNumber THEN @row_number + 1
        ELSE 1
    END AS num,
    @customer_no:=customerNumber as CustomerNumber,
    paymentDate,
    amount
FROM
    payments
ORDER BY customerNumber;

Мы использовали оператор CASE для вычисления условия: если номер клиента остаётся прежним, мы увеличиваем номер строки на 1, в противном случае мы устанавливаем номер строки равным 1. Результат будет тем же, что и на выше приведённом скриншоте.

Теперь добьёмся того же результата, используя технику производной таблицы и перекрёстного запроса:

SELECT 
    @row_number:=CASE
        WHEN @customer_no = customerNumber THEN @row_number + 1
        ELSE 1
    END AS num,
    @customer_no:=customerNumber as CustomerNumber,
    paymentDate,
    amount
FROM
    payments,(SELECT @customer_no:=0,@row_number:=0) as t
ORDER BY customerNumber;

Итак, мы научились эмулировать нумерацию строк запроса в MySQL.

Данная публикация представляет собой перевод статьи «MySQL row_number Emulation» , подготовленной дружной командой проекта Интернет-технологии.ру

телеграм канал. Подпишись, будет полезно!

MySQL номер строки | AlexGur

В SQL есть специальная функция вывода номеров строк в запросе ROW_NUMBER(). Но в его младшем брате MySQL нет такой функции. Единственный способ вывести номер строки в MySQL — использование переменной.

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

RANKPOINTSNAME
1500Алексей
2300Сергей
3200Виталий

Получать данные будем из таблицы истории получения очков, которая зовётся «history». Выглядит она так:

DATEPOINTSNAME
26.03.2017300Алексей
16.08.2016200Алексей
11.01.2016200Виталий
28.12.2015200Сергей
14.07.2015100Сергей

Для начала получим суммы набранных очков, сгруппированные по именам пользователей и отсортированные по убыванию. Запрос будет выглядеть так:

SELECT SUM(POINTS) as ‘POINTS’, NAME FROM `history` GROUP BY NAME ORDER BY SUM(POINTS) DESC;

База вернёт следующую таблицу:

POINTSNAME
500Алексей
300Сергей
200Виталий

Отлично! Теперь надо пронумеровать строки, чтобы получить место пользователя в рейтинге. Алексей будет первым, Сергей — вторым, Виталий — третьим.

Нумеровка делается через переменную, добавляемую к выводу. Казалось бы, можно сделать всё просто:

SET @rank=0;

SELECT @rank:=@rank+1 AS ‘RANK’, SELECT SUM(POINTS) as ‘POINTS’, NAME FROM `history` GROUP BY NAME ORDER BY SUM(POINTS) DESC;

Но если сделать такой запрос, то результат будет плачевным. Назначение рейтинга произойдёт после группировки, но до сортировки ORDER BY SUM(POINTS). Выглядеть результат будет так:

RANKPOINTSNAME
1500Алексей
3300Сергей
2200Виталий

Цифры ранга идут не по порядку: 1, 3, 2. Чтобы исправить положение необходимо добавлять столбец ранга после группировки и сортировки, в отдельном запросе. По логике, получается SELECT в SELECT. Синтаксис будет такой:

SET @rank=0;
SELECT @rank:=@rank+1 AS ‘RANK’, POINTS, NAME FROM
(

SELECT SUM(POINTS) as ‘POINTS’, NAME
FROM `history` GROUP BY NAME ORDER BY SUM(POINTS) DESC

) as t ;

Обратите внимание на окончание запроса. Без «as t;» написать запрос нельзя, иначе будет ошибка «Every derived table must have its own alias!«.

Результат такого запроса будет выглядеть как нормальная ранговая таблица. С правильным расположением цифр ранга:

RANKPOINTSNAME
1500Алексей
2300Сергей
3200Виталий

Теперь усложним задачу. Получим содержание одной ячейки такой таблицы.

Представим, что нам нужно вывести номер ранга в личный кабинет пользователя. Чтобы Алексей видел в своём личном кабинете цифру «1», Сергей — «2», а Виталий — «3». Тогда запрос будет содержать SELECT внутри SELECT внутри SELECT. Вот так:

SET @rank=0;
SELECT RANK FROM
(

SELECT @rank:=@rank+1 AS ‘RANK’, NAME FROM
(

SELECT SUM(POINTS), NAME
FROM `history` GROUP BY NAME ORDER BY SUM(POINTS) DESC

) as t1

) as t2
WHERE NAME = ‘Виталий’;

Обратите внимание на хвосты: «as t1», «as t2». Нужны разные псевдонимы, иначе будет ошибка «Every derived table must have its own alias!«.

P.S.

Конечно же, на реальном проекте такая таблица будет содержать id пользователя, а не его имя. Потому что в строке правды нет, а в числе есть 🙂

Как узнать количество строк в таблице MySQL

Однажды я столкнулся с этой задачей, но многие из предлагаемых в интернете решений у меня не работали. И всё же я нашёл выход. И даже не один.

Способ 1. phpMyAdmin

Начнем с самого простого и очевидного. Допустим, вам не нужно использовать полученный результат в коде, а просто узнать количество строк, только и всего.

Тогда заходим в phpMyAdmin (localhost/tools/phpmyadmin — для Денвера), затем выбираем нужную базу данных, после этого выбираем таблицу, количество строк в которой нужно выяснить, и видим следующее сообщение:

Способ 2. COUNT

Вот так выглядит сам SQL-запрос:

SELECT COUNT(1) FROM название_таблицы

SQL-запрос с условием:

SELECT COUNT(1) FROM название_таблицы WHERE условие

Реализация на PHP:

$a = mysql_query("SELECT COUNT(1) FROM название_таблицы");
$b = mysql_fetch_array( $a );
echo $b[0]; // выведет число строк

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

Способ 3. mysql_num_rows

Этот способ позволяет подсчитать количество строк результата запроса.

Например в WordPress посты хранятся в таблице wp_posts, таким образом мы можем узнать сколько записей (постов ) хранится в базе данных (в таблице MySQL). Этот код дан только для примера (или для случаев, когда среда WordPress не подгружена), так как в WordPress подключение к базе данных осуществляется через класс $wpdb.

/*
 * для начала подключимся к базе данных
 * возможно вы уже подключились к ней ранее
 * пользователь root и пустой пароль - настройки по умолчанию для Денвера
 */
$connect_db = mysql_connect("localhost", "root", "");
 
/*
 * выбираем базу данных, нужно указать её название
 */
mysql_select_db("truemisha_database", $connect_db);
 
/*
 * SQL запрос
 * у меня в качестве названия таблицы указана таблица с записями WordPress
 */
$posts = mysql_query("SELECT * FROM wp_posts", $connect_db);
 
/*
 * задействуем функцию mysql_num_rows()
 */
$num_rows = mysql_num_rows( $posts );
 
echo "Количество записей на вашем блоге WordPress: $num_rows \n";

В результат будут включены абсолютно все записи. А как узнать количество только тех, которые опубликованы? Для этого нам потребуется немного изменить SQL-запрос.

$posts = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish'", $connect_db);

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

строковых функций MySQL — qaru

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

.

sql — строка MySQL содержит строку

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

  1. Авторизоваться
    зарегистрироваться

  2. текущее сообщество

.

Строковые типы данных MySQL

Какие типы данных String в MySQL?

Пояснение

Строковые типы данных MySQL:

Различные типы строковых данных в MySQL.
CHAR ():
Это строка фиксированной длины, которая в основном используется, когда данные не будут сильно отличаться по длине. Его длина составляет от 0 до 255 символов. При сохранении значений CHAR они заполняются справа пробелами до указанной длины.При получении значений CHAR конечные пробелы удаляются.
VARCHAR ():
Это строка переменной длины, которая в основном используется, когда данные могут различаться по длине. Его длина составляет от 0 до 255 символов. VARCHAR Значения не дополняются при сохранении.
TINYTEXT, TINYBLOB:
Строка с максимальной длиной 255 символов.
TEXT:
TEXT столбцы обрабатываются как символьные строки (недвоичные строки).Он содержит максимальную длину 65535 символов.
BLOB:
BLOB означает B inary L arge OB ject. Он может содержать переменное количество данных. BLOB столбцы обрабатываются как байтовые строки (двоичные строки). Он содержит максимальную длину 65535 символов.
MEDIUMTEXT, MEDIUMBLOB:
Максимальная длина — 16777215 символов.
LONGTEXT, LONGBLOB:
Максимальная длина — 4294967295 символов.
BINARY:
BINARY аналогичен типу CHAR . Он хранит значение в виде двоичных байтовых строк вместо недвоичных символьных строк.
VARBINARY:
Тип VARBINARY аналогичен типу VARCHAR . Он хранит значение в виде двоичных байтовых строк вместо недвоичных символьных строк.
ENUM ():
Перечисление. Каждый столбец может иметь одно из указанных возможных значений. Он может хранить только одно из значений, объявленных в указанном списке, содержащемся в скобках ().Список ENUM включает до 65535 значений.
НАБОР ():
Набор. Каждый столбец может иметь более одного из указанных возможных значений. Он содержит до 64 элементов списка и может хранить более одного выбора. SET Значения внутренне представлены как целые числа.
Если параметры CHAR и VARCHAR используются в одной и той же таблице, то MySQL автоматически изменит CHAR на VARCHAR по причинам совместимости.Скобка () позволяет ввести максимальное количество символов, которые будут использоваться в столбце. Это все строковые типы данных MySQL
.

.

sql — как использовать GROUP BY для объединения строк в MySQL?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

  1. Авторизоваться
    зарегистрироваться

  2. текущее сообщество

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *