Удомельский форум

Удомельский форум (http://second.udomlya.ru/uf/index.php)
-   Программирование (http://second.udomlya.ru/uf/forumdisplay.php?f=26)
-   -   Выборка из текстового поля max() (http://second.udomlya.ru/uf/showthread.php?t=7894)

Troll 03.10.2007 13:13

Выборка из текстового поля max()
 
Вообщем задачка такая:
В базе имеется текстовое поле формата: "XXX-DDMMYYYY-NNN", где XXX некие буковки, DDMMYYYY соотвественно дата в понятном формате =) и NNN цифровое значение от 001 и до 999 соотвественно.
Неообходимо выбрать максимальное значение NNN для определенной даты.
Есть у кого какие идеи, как можно реализовать данную задачу? Язык pg_SQL.

slonik 03.10.2007 15:12

Цитата:

Сообщение от Troll
Вообщем задачка такая:
В базе имеется текстовое поле формата: "XXX-DDMMYYYY-NNN", где XXX некие буковки, DDMMYYYY соотвественно дата в понятном формате =) и NNN цифровое значение от 001 и до 999 соотвественно.
Неообходимо выбрать максимальное значение NNN для определенной даты.
Есть у кого какие идеи, как можно реализовать данную задачу? Язык pg_SQL.

Нашел где спросить ;d .
Основная идея такая:
1. Идём в магазин "Всё для сада и огорода" и покупаем самый большой секатор.
2. Идём в магазин "Книга" и покупаем "Большой словарь русского мата"
3. Ищем того кто разрабатывал эту базу.
4. Обрезаем неправильно растущие руки(см. пункт 1) и объясняем где они не правы(см. пункт 2)

P.S. Если на производительность пофиг, то выбираем из нашей таблицы поля вида ????DDMMYYYY????(DDMMYYYY это определенная дата) и вставляем во временную таблицу последние 3 символа из поля(ну может ид ещё); из временной таблицы выбираем максимальное поле.

P.P.S. Лутше всего, наверное, создать связанную таблицу, в которую положить эту строку разрезанную на три части и работать с ней, а для совместимости что-то типа хранимой процедуры замутить(ну или как она там в pg_SQL называется).

Troll 04.10.2007 09:42

::)
Цитата:

Сообщение от slonik
Нашел где спросить ;d .
Основная идея такая:
1. Идём в магазин "Всё для сада и огорода" и покупаем самый большой секатор.
2. Идём в магазин "Книга" и покупаем "Большой словарь русского мата"
3. Ищем того кто разрабатывал эту базу.
4. Обрезаем неправильно растущие руки(см. пункт 1) и объясняем где они не правы(см. пункт 2)

P.S. Если на производительность пофиг, то выбираем из нашей таблицы поля вида ????DDMMYYYY????(DDMMYYYY это определенная дата) и вставляем во временную таблицу последние 3 символа из поля(ну может ид ещё); из временной таблицы выбираем максимальное поле.

P.P.S. Лутше всего, наверное, создать связанную таблицу, в которую положить эту строку разрезанную на три части и работать с ней, а для совместимости что-то типа хранимой процедуры замутить(ну или как она там в pg_SQL называется).

Ну почему же сдесь не спросить? Ответили же? ;d
С первыми 4 пунктами полностью солидарен, но ехать далеко, да и языка не знаю )))
Так как до базы меня не пускають, имеем то, что имеем.
В общем остановился я на самом простом решении:
(Тут моя вина, условие описал не полностью и не совсем правильно, решение было неочевидно) Банальный подсчет кол-ва записей за дату DDMMYYYY ::) Т.к. записи удалятся не могут по условию и шаг у NNN всегда 1 - это должно сработать. Т.е.
Код:

SELECT COUNT(FIELD)
FROM TABLE
WHERE FIELD LIKE "%DDMMYYYY%";


Munche 13.12.2007 08:53

RegExp.pas вам в помощь (Для Delphi). Поищите в инете эту библиотеку и описание работы с ней, т.к. описываемый вами случай это именно анализ текста при помощи регулярных выражений.
Если нужно сделать именно на SQL, то без stored procedures вам не обойтись. Незнаю поддерживает их постгри или нет, не работал с ним :)

ales 25.12.2007 22:16

На простом SQL я бы сделал так: select ... where (условие поле like "%DDMMYYYY%") order by (это поле)

и из результата взял первую или последнюю запись, в зависимости от порядка сортировки

Troll 26.12.2007 11:49

Цитата:

Сообщение от ales
На простом SQL я бы сделал так: select ... where (условие поле like "%DDMMYYYY%") order by (это поле)

и из результата взял первую или последнюю запись, в зависимости от порядка сортировки

Вы не очень внимательно прочитали условия задачи. Насколько я помню в простом SQL нету возможности работы с текстовыми полями и поэтому выборка из результата запроса нужной цифры не представляется возможной ;) С другой стороны решения я уже нашёл и удачно использую.


Текущее время: 14:26. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot