powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на выборку
10 сообщений из 10, страница 1 из 1
Запрос на выборку
    #32829368
laifik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите правильно сформировать запрос. Например, есть таблица: в столбце примерно такие значения: автор
01
0101
01010102
01010103
01010104
01010110
0102

Мне нужно выбрать только строки, содержащие только четыре знака в значении столбза. Это 0101 и 0102.
Я создаю запрос
автор
SELECT LEFT(GostID, 4) AS RASD
FROM Table
GROUP BY LEFT(GostID, 4)

По этому запросу у меня выбрались строки со значениями 01, 0101, 0102. Т.е., прихватились значения LEFT(GostID, 2).
Подскажите, пожалуйста, как мне правильно сформировать условие?
Заранее благодарю.
Я пробовала и RTRIM, и RIGHT, у меня не получилось. Есть какой-то нюанс
...
Рейтинг: 0 / 0
Запрос на выборку
    #32829385
RFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно выбирать записи, которые начинаются с 0101 или 0102, то SELECT * from Table where GostID LIKE '0101%' or GostID LIKE '0102%'

Если нужны записи, равные 0101 или 0102, то SELECT * from Table where GostID = '0101' or GostID = '0102'

Если нужны записи, соделжащие именно по количеству знаков - 4, то SELECT * from Table where LENGTH(GostID) = 4
...
Рейтинг: 0 / 0
Запрос на выборку
    #32829595
laifik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне подходит третий вариант, т.к. дело не ограничивается выбором 0101, 0102. Есть и 0103 и 0204... Вариаций много. Поэтому нужно четко ограничить количество знаков.
Но используя функцию LENGTH, выдается ошибка, что такой функции нет. Ищу по книге SQL Server 2000, пока в указателях, на L тоже нет такой функции. Вы правильно ее указали?
...
Рейтинг: 0 / 0
Запрос на выборку
    #32829612
laifik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До истины докопалась сама.
Вот так правильно: автор
HAVING ({ fn LENGTH(GostID) } = 4)
Огромное спасибо за помощь!
...
Рейтинг: 0 / 0
Запрос на выборку
    #32829733
laifik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но это не то, что мне нужно. Для того, чтобы объяснить свою задачу, приведу больше значений GostID:
автор
01
01010101
01010102
01010103
01010104
01010105
0102
01020401
010301
010302
01050101
01050104
01050105
01050106
010502
01060101
01060102
01060103
02
В моей задаче больше подойдет, все-таки, LEFT(GostID, 4). В результате этого условия получится такой выбор:
автор
01
0101
0101
0101
0101
0101
0102
0102
0103
0103
0105
0105
0105
0105
0105
0106
0106
0106
02
Мне же нужно, чтобы в этом списке не было 01, 02. Кстати, это не полный список GostID, могут быть и 03...13...20. Важно то, что строки, где значение ограничивается двумя знаками, нужно исключить.
Далее я произвожу суммирование по второму столбцу таблицы, где проставлены значения масс. И у меня должны получиться суммы по подразделам (01, 02 - это разделы).
автор0101 - sum-масса
0102 - sum-масса
0103 - sum-масса
0105 - sum-масса
0106 - sum-масса

Это конечный результат. А если использую функцию LENGTH(GostID) = 4 , то результат выборки таков:
автор0102
...
Рейтинг: 0 / 0
Запрос на выборку
    #32829813
laifik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, уже вопрос решился. Помогли на форуме Си Билдера. Вот правильный ответ:
авторSELECT LEFT(GostID, 4) AS RASD
FROM Table Where LEFT(GostID, 2)<>LEFT(GostID, 4)
GROUP BY LEFT(GostID, 4)
...
Рейтинг: 0 / 0
Запрос на выборку
    #32830390
Diablo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как круто laifik завернула :)
...
Рейтинг: 0 / 0
Запрос на выборку
    #32841887
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Diabloкак круто laifik завернула :)

я в шоке
...
Рейтинг: 0 / 0
Запрос на выборку
    #32842776
RFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати я только щас допер что требовалось-то!!! Тут уже вопрос постановки задачи - как поставишь её, так результат и получишь. Короче, вот как это сделал бы я:
select left(tt1_num1,4) from `testtab1` where length(tt1_num1)>3
...
Рейтинг: 0 / 0
Запрос на выборку
    #32842779
RFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. если полностью, то select left(tt1_num1,4), sum(tt1_num2) from `testtab1` where length(tt1_num1)>3 group by left(tt1_num1)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на выборку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]