Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог sprintf в SQL 
V
    Опции темы
Royan
Дата 25.5.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Вообще я понимаю что логики, а уж тем более обработки строк в SQL быть не должно, но допустим, что из академического интереса перед вами стоит задача преобразовать строку с поомощью значений.

Пример, у вас есть таблица "A" c полями key/value 

1) RUR : 3
2) DESC : восемь

а также таблица "B", в которой содержатся строки вида "Ляляля %d рубля и %s копеек "

Трубуется написать запрос, который вставляет значения из таблицы "A", в строку из таблицы "B"


Как это сделать?


PS Через SUBSTR делать не хочется

Это сообщение отредактировал(а) Royan - 25.5.2010, 20:38


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Akina
Дата 25.5.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Есть REPLACE()

Добавлено через 37 секунд
Хотя это не для сервера БД дело - форматирование вывода. Этим должен заниматься клиент.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gcc
Дата 27.5.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



в PostgreSQL прямо в процедуре или в трггиере можно использовать perl

не вариант?


Код

CREATE FUNCTION ca (bigint, character varying, character varying, character varying, bigint) RETURNS character varying
    AS $_X$

use strict;
use POSIX;
use Sys::Hostname;
use MIME::Lite;
use MIME::QuotedPrint;

my ($user,$from,$to,$subj,$tmpl)=@_;

my $key=join'',map $$_[rand@$_],([0..9,'a'..'f'])x32;

my $url="http://www..ru/с/$key/";

my $date = POSIX::strftime("%Y-%m-%d %H:%M:%S", localtime);
my $hostname = hostname;

my $parts=spi_exec_query(<<SQL);
    select  template, subject, type
      from  email_templates
     where  id = $tmpl
SQL

my $_tmpl = $parts->{rows}[0]{template};
my $_subj = $parts->{rows}[0]{subject};

for($_tmpl,$_subj){
    s/__FROM__/$from/g;
    s/__TO__/$to/g;
    s/__KEY__/$key/g;
    s/__SUBJ__/$subj/g;
    s/__SUBJ~(\d+)__/substr($subj,0,$1)/ge;
    s/__DATE__/$date/g;
    s/__HOSTNAME__/$hostname/g;
    s/__URL__/$url/g;
}

utf8::encode $_ for $_tmpl,$_subj;

for($to){my$x;
  /</ ? s/<.*?\@/<mail.robot\@/
      : s/^.*?\@/mail.robot\@/;
  s/^(.*?)</utf8::encode $x=$1;'=?utf-8?Q?'.encode_qp($x,'').'?= <'/e;
}
my $mail = MIME::Lite->new(
    From     => $to,
    To       => $from,
    Subject  => '=?utf-8?Q?'.encode_qp($_subj,'').'?=',
    Encoding => 'base64',
    Type     => 'text/plain; charset=utf-8',
    Data     => $_tmpl,
);

$mail->send;

return $key;
$_X$
    LANGUAGE plperlu;

PM WWW ICQ Skype GTalk Jabber   Вверх
Royan
Дата 27.5.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Akina, Спасибо!


gcc, У меня DB2, тут такого нет


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие СУБД | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.