Обсуждение: Generating fields in views with search/replace?
Hi,
Say I have a table with fields 'template' and 'original_letter', and
'new_selected_letter'.  'template' could be 'abcdefg0abcdefg',
original_letter could be 'A' and new_selected_letter could be 'B'.
I want a view where I see 2 fields: 'original' as 'abcdefgAabcdefg'
and 'new_selected' as 'abcdefgBabcdefg', where the view has replaced
the '0' with original_letter or new_selected_letter respectively.
Sorry for the silly example, but is there a way for me to do this in
Postgresql?  I'm using Postgresql 9
Thanks.  Regards,
       Asfand Qazi
			
		On Thu, May 5, 2011 at 9:09 AM, Asfand Qazi (Sanger Institute) <aq2.sanger@gmail.com> wrote: > Hi, > > Say I have a table with fields 'template' and 'original_letter', and > 'new_selected_letter'. 'template' could be 'abcdefg0abcdefg', > original_letter could be 'A' and new_selected_letter could be 'B'. > > I want a view where I see 2 fields: 'original' as 'abcdefgAabcdefg' > and 'new_selected' as 'abcdefgBabcdefg', where the view has replaced > the '0' with original_letter or new_selected_letter respectively. > > Sorry for the silly example, but is there a way for me to do this in > Postgresql? I'm using Postgresql 9 The mechanics of making a view do something like that is trivial, but your example doesn't make clear why the character '0' is special and is the one translated? merlin
Asfand Qazi (Sanger Institute) wrote:
>
> Say I have a table with fields 'template' and 'original_letter', and
> 'new_selected_letter'.  'template' could be 'abcdefg0abcdefg',
> original_letter could be 'A' and new_selected_letter could be 'B'.
>
> I want a view where I see 2 fields: 'original' as 'abcdefgAabcdefg'
> and 'new_selected' as 'abcdefgBabcdefg', where the view has replaced
> the '0' with original_letter or new_selected_letter respectively.
Well, in 8.4.7 you'd use something like:
   create view xyz as
      select regexp_replace(template, '0', original_letter) as original,
             regexp_replace(template, '0', new_selected_letter) as new_selected
         from template_table;
Should be the same in 9.x.
(See docs for more info on the regexp_replace() function)
HTH.
Later,
Bosco.
			
		On Thu, May 5, 2011 at 8:37 PM, Bosco Rama <postgres@boscorama.com> wrote:
> Asfand Qazi (Sanger Institute) wrote:
>>
>> Say I have a table with fields 'template' and 'original_letter', and
>> 'new_selected_letter'.  'template' could be 'abcdefg0abcdefg',
>> original_letter could be 'A' and new_selected_letter could be 'B'.
>>
>> I want a view where I see 2 fields: 'original' as 'abcdefgAabcdefg'
>> and 'new_selected' as 'abcdefgBabcdefg', where the view has replaced
>> the '0' with original_letter or new_selected_letter respectively.
>
> Well, in 8.4.7 you'd use something like:
>
>   create view xyz as
>      select regexp_replace(template, '0', original_letter) as original,
>             regexp_replace(template, '0', new_selected_letter) as new_selected
>         from template_table;
>
> Should be the same in 9.x.
>
> (See docs for more info on the regexp_replace() function)
>
> HTH.
>
> Later,
> Bosco.
>
Ah.... thanks, that's perfect.
I won't be using a '0', I'll be using some non-printable ASCII
character in the template, but the concept was the same.
Again, many thanks.  Regards,
      Asfand Qazi