Форум: "Базы";
Текущий архив: 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