выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Привет всем! Хотите задачу!?
Есть таблица, поле fio которого содержит вместе через один пробел и фамилию, и имя и отчество клиентов. Причем, заполняли его неряшливо – вот например так: ИВАнов пеТр СидоРович Надо выудить из таблицы всех клиентов с именем Александр. Пусть искомое имя уже привоено переменной name: name=”Александр” Вопрос: как извлечь из таблицы в курсор всех Александров с помощью всего лишь одного селекта? ------------------ |
Re: выборка одним селектом | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Если данные заполнялись действительно неряшливо, то, в общем случае - никак. Все равно будет часть данных потеряна или выбрано лишнее. Ну, там синтаксические ошибки, например.
Если же вопрос стоит только в регистре букв и имя - это всегда второе слово, то все довольно просто
|
Re: выборка одним селектом | |
---|---|
rhs72 Сообщений: 1934 Откуда: Алматы - Чарджоу Дата регистрации: 21.03.2007 |
Я предлагаю другой вариант, с учетом того, что в одном поле содержится ФАМИЛИЯ-ИМЯ-ОТЧЕСТВО :
SELECT * FROM MyTab WHERE UPPER(SUBSTR(fio,LEN(fio)-ATCC(" ",fio),LEN(fio)-ATCC(" ",fio))=UPPER(name) Возможно немного надо подправить указатели начальной и конечной позиции в функции SUBSTR() ------------------ "Знание того, что считать ответом, равносильно знанию ответа". |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Привет всем!
Ваши решения хороши! А вот мое решение: name="Александр" SELECT fio FROM myTable WHERE UPPER(ALLTRIM(SUBSTR(fio,AT(' ',fio,1)+1,AT(' ',fio,2)-AT(' ',fio,1))))==UPPER(name) Однако этот селект работает правильно, если между словами только один пробел! А потому мне пришлось написать строку (одну!) UPDATE, убирающую лишние пробелы между словами! Напишите вы тоже, опять наверное что-то хорошее получится! Майкл ------------------ |
Re: выборка одним селектом | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Володя Максимов уже всё написал ;)
Но можно ещё так:
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: выборка одним селектом | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
А где гарантия, что при этом name будет совпадать именно с именем, а не к примеру с отчеством? |
Re: выборка одним селектом | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Гарантия в обрамляющих пробелах. Вот человек без отчества с именем "Александр" может быть, тогда не сработает.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: выборка одним селектом | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Ну это если поле varchar, а если например char(100), то у отчества тоже будут пробелы.
|
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Привет всем!
Знаете, друзья, Максимов использовал функцию, о существовании которой я просто не знал: GetWordNum() - я пока вырастаю из старых версий фокса. Эта функция сразу же сняла все мои проблемы. Она дает возможность указать номер слова в стринге, а это уже сила! А скажите кто-нибудь, есть где новая сборка прибамбасов по типу Пинигинской! Второе, есть ли где библиотека API - функций с русским хеллпом! Благодарствую! майкл. |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Привет всем!
На предприятии ведется учет аремени, потраченного на ремонт техники. Для удобства записи часы и минуты записываются как одно дробное число, например 76 часов 3 мин записываем как 76,03 . Когда надо сложить несколько таких чисел , можно в цикле разбить каждое очередное такое число на целую и дробную часть и далее просто.... Однако, если просуммировать поле Vremya с такими числами с помощью селекта (select .... , sum(vremya) .....from ... into ...., то конечно же, получится совсем не то. И все таки, может ли кто сделать это именно селектом? Майил |
Re: выборка одним селектом | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Эта функция, правда под названием WordNum и в отдельной библиотеке, существует в стандартной поставке фокса еще с версии 2.0 ------------------ Лень - это неосознанная мудрость. |
Re: выборка одним селектом | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Перевести доморощенные единицы измерения в секунды и обсуммируйтесь хоть до посинения. Сумму секунд перевести в доморощенную единцу измерения потом, надеюсь, сможете? ------------------ Лень - это неосознанная мудрость. |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Сэр!
Работнички мои от "доморощенных" величин отказываться не хотят - они им, консерваторам, дороги! Пришлось по ихнему делать. И вот результат (упрощенный вариант): CREATE TABLE rabota ( vremya n(8,2), oplata n(8,2)) INSERT INTO rabota ( vremya ,oplata ) VALUES (27.56 , 10024.34) INSERT INTO rabota ( vremya ,oplata ) VALUES (5.43 , 567.21) INSERT INTO rabota ( vremya ,oplata ) VALUES (13.31 , 456.37) INSERT INTO rabota ( vremya ,oplata ) VALUES (44.06 , 611.08) BROWSE SELECT ; INT(SUM(60*INT(vremya )+(vremya - int(vremya ))*100)/60); +MOD(SUM(60*INT(vremya )+(vremya - int(vremya ))*100),60)/100 as Время,; SUM(oplata) as Оплата FROM rabota Переводить "доморощенное" число в секунды нет надобности. Все перевел в минуты, сложил и вернул обратно в "доморощенную" форму. С уважением, Майил. |
Re: выборка одним селектом | |
---|---|
h.i.a. Сообщений: 4002 Откуда: Мурманск/Спб/Мск Дата регистрации: 18.11.2005 |
------------------ Исправлено 1 раз(а). Последнее : h.i.a., 13.11.07 18:03 |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Сэр!
Ваш селект вычисляет только часы, а минут нетути! В резудьтате деления на 60, получается остаток в минутах, которое надо "прилепить" к часам после запятой. И вообще, есть ли какие-либо другие способы записи времени, дающие возможность складывать времена более просто? Майкл |
Re: выборка одним селектом | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Серега Сизив тебе уже посоветовал правильное решение, НО оно вам не подошло.
Раз доморощенные единицы измерения, то и ф-ции для работы с ними д.б. тоже доморощенными. ------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: выборка одним селектом | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Батенька, Вы, впрочем как и многи другие, путаете хранение информации с ее отображением. То, что "работнички" хотят видеть в доморощенных единицах совсем не означает, что их и надо хранить и обрабатывать тоже в таких же единицах. Как только Вы это поймете, так у Вас сразу множество проблем отпадет сами собой. До прихода понимания занимайтесь борьбой с ветряными мельницами. ------------------ Лень - это неосознанная мудрость. Исправлено 1 раз(а). Последнее : ssa, 14.11.07 11:18 |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
Стоп, ребята!
У небезизвестного вам Дато есть лозунг: "Если зайца долго шлепать, он начнет соображать." Так что, благодарствуем за шлепки! Сделайте передышку, отдохните немного, а я начну сначала. Итак, в цеху ремонтируется двигатель. Его разбирают несколько рабочих - у каждого свой тариф оплаты, соответствующий его разряду. Они возятся с этим движком несколько недель, а за неделю у каждого рабочего набегает 30-40 часов с минутами, и эти часы надо ввести в таблицу, а потом за месяц, точнее, за весь срок ремонта сложить... Поле типа DateTime не примет часы, большие 24 ... И что же ...? Ковыряюсь дальше.. С уважением, Майкл. |
Re: выборка одним селектом | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Храни в поле типа int в минутах. Для показа преобразовывай в доморощенные единицы. Все. Только для показа, и только уже готовые данные. ps: на самом деле в поле типа datetime лежит в двоичном виде число секунд от какого-то момента времени (обычно от начала 20-го века), которое для показа преобразуется к нужному виду. ------------------ Лень - это неосознанная мудрость. Исправлено 1 раз(а). Последнее : ssa, 14.11.07 20:32 |
Re: выборка одним селектом | |
---|---|
mayil Сообщений: 277 Откуда: Гянджа, Азербайд Дата регистрации: 20.06.2006 |
[quote ssa][quote mayil] Поле типа DateTime не примет часы, большие 24 ... И что же ...?
[/quote] Храни в поле типа int в минутах. Для показа преобразовывай в доморощенные единицы. Все. Только для показа, и только уже готовые данные. Ну а преобразовывать в минуты поступающую информацию, например такую: 67 ч 45 мин , кто будет делать? Чтобы записать его с интеджер-поле. Все те же хлопоты. Я думал даже ввести 2 поля: "часы" и "минуты", прикинул, - опять же не то! Так что первое, что пришло в голову, сработало, правда, на примитивном уровне - "доморощенном" , но все-таки селекты работают! Да ну его - пусть так и остается. И так дел невпроворот. Спасибо. Майкл |
© 2000-2024 Fox Club  |