Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

В selecte обработать строку.   Найти похожие ветки 

 
worldmen ©   (2006-08-22 12:40) [0]

Использую Firebird, локальный, и IBExpert.
Есть таблица клиентов, в ней фамилии имя и отчество полностью в отдельных полях.
Нужно что бы фамилия имя отчество выводилось в таком формате : Иванов И.И.
Т.е. имя отчество было сокращенным.
Я не нашел такой функции в Firebirdе.


 
ANB ©   (2006-08-22 12:42) [1]

substr ?


 
Сергей М. ©   (2006-08-22 12:45) [2]


> не нашел такой функции в Firebirdе


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


 
Dok   (2006-08-22 12:52) [3]


> Нужно что бы фамилия имя отчество выводилось в таком формате
> : Иванов И.И.

только на клиенте. нет смысла этим грузить сервер


 
Сергей М. ©   (2006-08-22 12:57) [4]


> Dok   (22.08.06 12:52) [3]


Ну почему же ?
В случае обработки на клиенте проигрываем в траффике, если это критично.
Вот уж что точно нежелательно - это использовать без крайней необходимости строковые ф-ции в составе PSQL.


 
worldmen ©   (2006-08-22 12:57) [5]

> ANB ©   (22.08.06 12:42) [1]
> substr

 Такой функции нет в Firebirdе

> реализовать такую ф-цию в своей UDF-библиотеке
Могу, конечно. Думал есть встроеная. Изобретать велосипед не хочется.
Если быть точным - то создать процедуру с выходным параметром, т.к. фцнкций там нет.


 
Dok   (2006-08-22 13:02) [6]


> В случае обработки на клиенте проигрываем в траффике, если
> это критично.

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


 
Сергей М. ©   (2006-08-22 13:03) [7]


> Изобретать велосипед не хочется


Ну посмотри среди готовых на ibase.ru


> создать процедуру с выходным параметром, т.к. фцнкций там
> нет


Ты про что ? Про UDF ? Или про ХП ?


 
Dok   (2006-08-22 13:06) [8]


>  Такой функции нет в Firebirdе

с чего бы это?


 
Val ©   (2006-08-22 13:24) [9]

>[6] Dok   (22.08.06 13:02)
почему не в обзоре?


 
Dok   (2006-08-22 13:37) [10]


> почему не в обзоре?

не зрозумив.


 
Val ©   (2006-08-22 13:46) [11]

>[10] Dok   (22.08.06 13:37)
чего именно?


 
Dok   (2006-08-22 13:58) [12]

Вашэ пытання


 
Val ©   (2006-08-22 14:08) [13]

тогда уж - вашого...
я спрашиваю - зачем заниматься этой ерундой на клиенте, если это, обработанное соответственно, поле можно просто добавить в обзор, который и будет отображать форма?


 
Dok   (2006-08-22 14:11) [14]


> я спрашиваю - зачем заниматься этой ерундой на клиенте,
> если это, обработанное соответственно, поле можно просто
> добавить в обзор, который и будет отображать форма?

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


 
atruhin ©   (2006-08-22 14:14) [15]

Вообще начиная с FB 1.5, SUBSTRING - работает.


 
yaral ©   (2006-08-22 14:19) [16]

А кто сказал что клиент может быть только один? Да и вообще в каждом НД, там где это может понадобиться, все это формировать? Один раз написал на сервере и забыл, и пользуешь везде где это поле нужно.
Я тригер написал который в отдельное поле заносит фамилию и инициалы, при внесении и изменении записи, т.к. постоянно грузить сервер вычислениями не хочеться, а такое поле много место не займет.

CREATE TRIGGER PERSPHI_IU FOR PERSPHI
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
DECLARE VARIABLE VLINI VARCHAR(30);
DECLARE VARIABLE VLFS VARCHAR(100);
BEGIN
 VLINI = "";
 VLFS  = "";

 IF (NOT NEW.L IS NULL) THEN
   BEGIN
     NEW.L=F_LTRIM(F_RTRIM(NEW.L));
     IF (NEW.L<>"") THEN
       BEGIN
         NEW.L = UPPERFIRST(NEW.L);
         VLINI = NEW.L;
         VLFS  = NEW.L;
       END
   END

 IF (NOT NEW.F IS NULL) THEN
   BEGIN
     NEW.F=F_LTRIM(F_RTRIM(NEW.F));
     IF (NEW.F<>"") THEN
       BEGIN
         NEW.F = UPPERFIRST(NEW.F);
         IF (:VLINI<>"") THEN
           BEGIN
             VLINI = :VLINI || " " || F_LEFT(NEW.F, 1) || ".";
             VLFS  = :VLFS  || " " || NEW.F;
           END
       END
   END

 IF (NOT NEW.S IS NULL) THEN
   BEGIN
     NEW.S=F_LTRIM(F_RTRIM(NEW.S));
     IF (NEW.S<>"") THEN
       BEGIN
         NEW.S = UPPERFIRST(NEW.S);
         IF ((:VLINI<>"") AND (NEW.F<>"")) THEN
           VLINI = :VLINI || F_LEFT(NEW.S, 1) || ".";
           VLFS  = :VLFS  || " " || NEW.S;
       END
   END

 UPDATE PERS
 SET SNAME = :VLINI,
     NAME  = :VLFS
 WHERE PERS_ID = NEW.PERS_ID;
END


F_LTRIM и прочие из FreeUDF


 
Dok   (2006-08-22 14:26) [17]


> yaral ©   (22.08.06 14:19) [16]

Мдя... А чуток подумать и сделать 3 поля? И потом если надо на клиенте конкатенацию сделать?


 
yaral ©   (2006-08-22 14:41) [18]

> Dok   (22.08.06 14:26) [17]
Дело твое, только вот постоянно делать это там где потребуется... это только в простых приложениях на таблицу клиентов используется один DataSet.
В чуть посложней оно часто нужно такое поле. И в сетках, и в Edit-ах, и в отчетах всевозможных, и что везде делать из трех полей? Заняться нечем больше?


 
Val ©   (2006-08-22 14:43) [19]

>[14] Dok   (22.08.06 14:11)
все что делает сервер, нужно клиенту - посоветуете все на клиенте и лопатить? :)


 
Сергей М. ©   (2006-08-22 14:52) [20]


> все что делает сервер, нужно клиенту


Все что сервер делает плохо (точнее - хуже клиента), клиенту не нужно)


 
Val ©   (2006-08-22 14:53) [21]

не к данному случаю.


 
yaral ©   (2006-08-22 14:56) [22]

> Сергей М. ©   (22.08.06 14:52) [20]
Наример обрабатывает и преобразует данные?


 
Dok   (2006-08-22 14:59) [23]


> все что делает сервер, нужно клиенту - посоветуете все на
> клиенте и лопатить? :)
>

почитайте внимательно [6]


 
Dok   (2006-08-22 15:01) [24]


> Дело твое, только вот постоянно делать это там где потребуется.
> .. это только в простых приложениях на таблицу клиентов
> используется один DataSet.
> В чуть посложней оно часто нужно такое поле. И в сетках,
>  и в Edit-ах, и в отчетах всевозможных, и что везде делать
> из трех полей? Заняться нечем больше?

не понял. Как три поля этому мешают? Ну сделай на клиенте конкатенацию и покажи юзверю. В чем трабл? А заставлять сервер парсить, то что с клиента и дет, когда клиент это может во много раз лучше - нефиг.


 
Dok   (2006-08-22 15:02) [25]


> Все что сервер делает плохо (точнее - хуже клиента), клиенту
> не нужно)

золотые слова :)


 
Сергей М. ©   (2006-08-22 15:04) [26]


> Val ©   (22.08.06 14:53) [21]
>
> не к данному случаю.


А ты замерь производительность PSQL-функции SubString и соответствующих ее аналогов в UDF или на клиенте (на достаточно большом НД) - сразу все встанет на свои места) .. А потом я объясню, почему наблюдается такая ощутимая разница в результатах замеров.


> yaral ©   (22.08.06 14:56) [22]
> Наример обрабатывает и преобразует данные?


Все зависит от условий, в которых будет востребованы обработка и преобразование.


 
Виталий Панасенко   (2006-08-22 15:33) [27]

computed by(fam||substring(im from 1 for 1)||"."||substring(ot from 1 for 1)||".")?


 
worldmen ©   (2006-08-22 16:15) [28]

СПАСИБО. С substring разобрался.
А вот насчет UDF-библиотек просветите.
Никогдо не использовал. Я перепутал с ХП.


 
Сергей М. ©   (2006-08-22 16:43) [29]


> worldmen ©   (22.08.06 16:15) [28]


На ibase.ru уже был ? Там есть предостаточно инф-ции о UDF: что это такое, с чем едят и т.д. и т.п.


 
worldmen ©   (2006-08-22 17:22) [30]

> Сергей М. ©   (22.08.06 16:43) [29]
Спасибо.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.049 c
2-1160122745
Константин_
2006-10-06 12:19
2006.10.22
Перерисовка формы


2-1159429147
Megabyte
2006-09-28 11:39
2006.10.22
Изменяемые сложные запросы


15-1159877352
vitv
2006-10-03 16:09
2006.10.22
Не ставится Дэлфи2006.


15-1159433713
SUPAPLEX
2006-09-28 12:55
2006.10.22
У кого есть игра SUPAPLEX


15-1159674869
Fedia
2006-10-01 07:54
2006.10.22
ссылка на рейтинг функций, аналогов Pos





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский