Обсуждение: Datatype conversion help

Поиск
Список
Период
Сортировка

Datatype conversion help

От
Yasir Malik
Дата:
Suppose I have an integer between 0 and 99 and I want to covert it to
string, and pad leading zeros if neccessary.  For example,
1  => 01
10 => 10

I've tried to_char(in_val, '99'), and that returns a string that is two
charecters, but there isn't a leading zero incase I have the number 2 as
input.  Any ideas?  Thanks.
Yasir


Re: Datatype conversion help

От
Michael A Nachbaur
Дата:
You want to use:

nachbaur=# select to_char(5, '00');to_char
--------- 05
(1 row)

By using "0", you indicate you want leading zeros.  See 
http://www.postgresql.org/docs/view.php?version=7.3&idoc=1&file=functions-formatting.html 
for more information.

On Tuesday 08 July 2003 01:07 pm, Yasir Malik wrote:
> Suppose I have an integer between 0 and 99 and I want to covert it to
> string, and pad leading zeros if neccessary.  For example,
> 1  => 01
> 10 => 10
>
> I've tried to_char(in_val, '99'), and that returns a string that is two
> charecters, but there isn't a leading zero incase I have the number 2 as
> input.  Any ideas?  Thanks.
> Yasir
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings

-- 
/* Michael A. Nachbaur <mike@nachbaur.com>* http://nachbaur.com/pgpkey.asc*/

"Oh no, not again." 




Re: Datatype conversion help

От
Yasir Malik
Дата:
Thank you so much!  But my problem is that when I do
to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
'9999')

where mn, dy, and yr are ints, is that the output has a space after the
the dash.  For example, I get
07- 25- 1994

instead of what I want:
07-25-1994

Thanks,
Yasir

On Tue, 8 Jul 2003, Richard Rowell wrote:

> Date: 08 Jul 2003 15:21:33 -0500
> From: Richard Rowell <richard@bowmansystems.com>
> To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> Subject: Re: [SQL] Datatype conversion help
>
> On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> > I've tried to_char(in_val, '99'), and that returns a string that is two
>
> select to_char(9,'00');
>


Re: Datatype conversion help

От
Michael A Nachbaur
Дата:
http://www.postgresql.org/docs/view.php?version=7.3&idoc=1&file=functions-formatting.html#FUNCTIONS-FORMATTING-DATETIMEMOD-TABLE

See the pattern modifier "FM".  From the docs:

"FM prefix - fill mode (suppress padding blanks and zeroes)"

On Tuesday 08 July 2003 01:28 pm, Yasir Malik wrote:
> Thank you so much!  But my problem is that when I do
> to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
> '9999')
>
> where mn, dy, and yr are ints, is that the output has a space after the
> the dash.  For example, I get
> 07- 25- 1994
>
> instead of what I want:
> 07-25-1994
>
> Thanks,
> Yasir
>
> On Tue, 8 Jul 2003, Richard Rowell wrote:
> > Date: 08 Jul 2003 15:21:33 -0500
> > From: Richard Rowell <richard@bowmansystems.com>
> > To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> > Subject: Re: [SQL] Datatype conversion help
> >
> > On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> > > I've tried to_char(in_val, '99'), and that returns a string that is two
> >
> > select to_char(9,'00');
>
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend

-- 
/* Michael A. Nachbaur <mike@nachbaur.com>* http://nachbaur.com/pgpkey.asc*/

"He expanded his chest to make it totally clear that here 
was the sort of man you only dared to cross if you had a 
team of Sherpas with you. "



Re: Datatype conversion help

От
"David Olbersen"
Дата:
Yasir,

If this is a date you're playing with, simply use:

to_char( <whatever date>, 'MM-DD-YYYY' )

to get what you want.

--------------------------
David Olbersen
iGuard Engineer
St. Bernard Software
11415 West Bernardo Court
San Diego, CA 92127
1-858-676-2277 x2152


> -----Original Message-----
> From: Yasir Malik [mailto:ymalik@cs.stevens-tech.edu]
> Sent: Tuesday, July 08, 2003 1:29 PM
> To: pgsql-sql@postgresql.org
> Subject: Re: [SQL] Datatype conversion help
>
>
> Thank you so much!  But my problem is that when I do
> to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
> '9999')
>
> where mn, dy, and yr are ints, is that the output has a space
> after the
> the dash.  For example, I get
> 07- 25- 1994
>
> instead of what I want:
> 07-25-1994
>
> Thanks,
> Yasir
>
> On Tue, 8 Jul 2003, Richard Rowell wrote:
>
> > Date: 08 Jul 2003 15:21:33 -0500
> > From: Richard Rowell <richard@bowmansystems.com>
> > To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> > Subject: Re: [SQL] Datatype conversion help
> >
> > On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> > > I've tried to_char(in_val, '99'), and that returns a
> string that is two
> >
> > select to_char(9,'00');
> >
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 8: explain analyze is your friend
>


Re: Datatype conversion help

От
Yasir Malik
Дата:
Yes, Mr. Nachbaur helped me out.  Thanks.  I don't think I can do
to_char(<whatever date>, 'MM-DD-YYYY)
because the date fields are originally stored as separate integers in my
schema (they have to be that way).  I still can't understand why the extra
space was added after the dash.  It just made my life more miserable.
Yasir

On Tue, 8 Jul 2003, David Olbersen
wrote:

> Date: Tue, 8 Jul 2003 14:02:55 -0700
> From: David Olbersen <DOlbersen@stbernard.com>
> To: pgsql-sql@postgresql.org
> Subject: Re: [SQL] Datatype conversion help
>
> Yasir,
>
> If this is a date you're playing with, simply use:
>
> to_char( <whatever date>, 'MM-DD-YYYY' )
>
> to get what you want.
>
> --------------------------
> David Olbersen
> iGuard Engineer
> St. Bernard Software
> 11415 West Bernardo Court
> San Diego, CA 92127
> 1-858-676-2277 x2152
>
>
> > -----Original Message-----
> > From: Yasir Malik [mailto:ymalik@cs.stevens-tech.edu]
> > Sent: Tuesday, July 08, 2003 1:29 PM
> > To: pgsql-sql@postgresql.org
> > Subject: Re: [SQL] Datatype conversion help
> >
> >
> > Thank you so much!  But my problem is that when I do
> > to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
> > '9999')
> >
> > where mn, dy, and yr are ints, is that the output has a space
> > after the
> > the dash.  For example, I get
> > 07- 25- 1994
> >
> > instead of what I want:
> > 07-25-1994
> >
> > Thanks,
> > Yasir
> >
> > On Tue, 8 Jul 2003, Richard Rowell wrote:
> >
> > > Date: 08 Jul 2003 15:21:33 -0500
> > > From: Richard Rowell <richard@bowmansystems.com>
> > > To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> > > Subject: Re: [SQL] Datatype conversion help
> > >
> > > On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> > > > I've tried to_char(in_val, '99'), and that returns a
> > string that is two
> > >
> > > select to_char(9,'00');
> > >
> >
> > ---------------------------(end of
> > broadcast)---------------------------
> > TIP 8: explain analyze is your friend
> >
>
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
>


Re: Datatype conversion help

От
Richard Huxton
Дата:
On Tuesday 08 Jul 2003 10:19 pm, Yasir Malik wrote:
> Yes, Mr. Nachbaur helped me out.  Thanks.  I don't think I can do
> to_char(<whatever date>, 'MM-DD-YYYY)
> because the date fields are originally stored as separate integers in my
> schema (they have to be that way).  I still can't understand why the extra
> space was added after the dash.  It just made my life more miserable.
> Yasir

You are not the only one it makes miserable. I believe it's there to provide
compatibility with Oracle/some other db. Their function does it so ours
should too. Very strange behaviour though.

--  Richard Huxton


Re: Datatype conversion help

От
Dmitry Tkach
Дата:
What about lpad?

select lpad (7, 2, 0) || '-' || lpad (9, 2, '0') || '-2003'; ?column? 
------------07-09-2003
(1 row)


I hope, it helps...

Dima

Yasir Malik wrote:

>Thank you so much!  But my problem is that when I do
>to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
>'9999')
>
>where mn, dy, and yr are ints, is that the output has a space after the
>the dash.  For example, I get
>07- 25- 1994
>
>instead of what I want:
>07-25-1994
>
>Thanks,
>Yasir
>
>On Tue, 8 Jul 2003, Richard Rowell wrote:
>
>  
>
>>Date: 08 Jul 2003 15:21:33 -0500
>>From: Richard Rowell <richard@bowmansystems.com>
>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
>>Subject: Re: [SQL] Datatype conversion help
>>
>>On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
>>    
>>
>>>I've tried to_char(in_val, '99'), and that returns a string that is two
>>>      
>>>
>>select to_char(9,'00');
>>
>>    
>>
>
>---------------------------(end of broadcast)---------------------------
>TIP 8: explain analyze is your friend
>  
>




Re: Datatype conversion help

От
Yasir Malik
Дата:
I used trim and here's what I came up with:
to_date(trim(to_char(yr, '9999') || trim(to_char(mn, '00')) ||
trim(to_char(dy, '00'))), 'YYYYMMDD')

Apparently to_char adds a space to the charecter you are casting.
Yasir

On Wed, 9 Jul 2003, Dmitry Tkach wrote:

> Date: Wed, 09 Jul 2003 18:40:37 -0400
> From: Dmitry Tkach <dmitry@openratings.com>
> To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> Cc: pgsql-sql@postgresql.org
> Subject: Re: [SQL] Datatype conversion help
>
> What about lpad?
>
> select lpad (7, 2, 0) || '-' || lpad (9, 2, '0') || '-2003';
>   ?column?
> ------------
>  07-09-2003
> (1 row)
>
>
> I hope, it helps...
>
> Dima
>
> Yasir Malik wrote:
>
> >Thank you so much!  But my problem is that when I do
> >to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
> >'9999')
> >
> >where mn, dy, and yr are ints, is that the output has a space after the
> >the dash.  For example, I get
> >07- 25- 1994
> >
> >instead of what I want:
> >07-25-1994
> >
> >Thanks,
> >Yasir
> >
> >On Tue, 8 Jul 2003, Richard Rowell wrote:
> >
> >
> >
> >>Date: 08 Jul 2003 15:21:33 -0500
> >>From: Richard Rowell <richard@bowmansystems.com>
> >>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> >>Subject: Re: [SQL] Datatype conversion help
> >>
> >>On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> >>
> >>
> >>>I've tried to_char(in_val, '99'), and that returns a string that is two
> >>>
> >>>
> >>select to_char(9,'00');
> >>
> >>
> >>
> >
> >---------------------------(end of broadcast)---------------------------
> >TIP 8: explain analyze is your friend
> >
> >
>
>


Re: Datatype conversion help

От
Dmitry Tkach
Дата:
Yasir Malik wrote:

>I used trim and here's what I came up with:
>to_date(trim(to_char(yr, '9999') || trim(to_char(mn, '00')) ||
>trim(to_char(dy, '00'))), 'YYYYMMDD')
>
>Apparently to_char adds a space to the charecter you are casting.
>  
>
I know :-)
And lpad doesn't - that's why I suggested it :-)

Dima

>
>On Wed, 9 Jul 2003, Dmitry Tkach wrote:
>
>  
>
>>Date: Wed, 09 Jul 2003 18:40:37 -0400
>>From: Dmitry Tkach <dmitry@openratings.com>
>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
>>Cc: pgsql-sql@postgresql.org
>>Subject: Re: [SQL] Datatype conversion help
>>
>>What about lpad?
>>
>>select lpad (7, 2, 0) || '-' || lpad (9, 2, '0') || '-2003';
>>  ?column?
>>------------
>> 07-09-2003
>>(1 row)
>>
>>
>>I hope, it helps...
>>
>>Dima
>>
>>Yasir Malik wrote:
>>
>>    
>>
>>>Thank you so much!  But my problem is that when I do
>>>to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
>>>'9999')
>>>
>>>where mn, dy, and yr are ints, is that the output has a space after the
>>>the dash.  For example, I get
>>>07- 25- 1994
>>>
>>>instead of what I want:
>>>07-25-1994
>>>
>>>Thanks,
>>>Yasir
>>>
>>>On Tue, 8 Jul 2003, Richard Rowell wrote:
>>>
>>>
>>>
>>>      
>>>
>>>>Date: 08 Jul 2003 15:21:33 -0500
>>>>From: Richard Rowell <richard@bowmansystems.com>
>>>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
>>>>Subject: Re: [SQL] Datatype conversion help
>>>>
>>>>On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
>>>>
>>>>
>>>>        
>>>>
>>>>>I've tried to_char(in_val, '99'), and that returns a string that is two
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>select to_char(9,'00');
>>>>
>>>>
>>>>
>>>>        
>>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 8: explain analyze is your friend
>>>
>>>
>>>      
>>>
>>    
>>




Re: Datatype conversion help

От
Yasir Malik
Дата:
I will surely use your suggestion in my future programs.
Thanks,
Yasir

On Wed, 9 Jul 2003, Dmitry Tkach wrote:

> Date: Wed, 09 Jul 2003 18:51:48 -0400
> From: Dmitry Tkach <dmitry@openratings.com>
> To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> Cc: pgsql-sql@postgresql.org
> Subject: Re: [SQL] Datatype conversion help
>
> Yasir Malik wrote:
>
> >I used trim and here's what I came up with:
> >to_date(trim(to_char(yr, '9999') || trim(to_char(mn, '00')) ||
> >trim(to_char(dy, '00'))), 'YYYYMMDD')
> >
> >Apparently to_char adds a space to the charecter you are casting.
> >
> >
> I know :-)
> And lpad doesn't - that's why I suggested it :-)
>
> Dima
>
> >
> >On Wed, 9 Jul 2003, Dmitry Tkach wrote:
> >
> >
> >
> >>Date: Wed, 09 Jul 2003 18:40:37 -0400
> >>From: Dmitry Tkach <dmitry@openratings.com>
> >>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> >>Cc: pgsql-sql@postgresql.org
> >>Subject: Re: [SQL] Datatype conversion help
> >>
> >>What about lpad?
> >>
> >>select lpad (7, 2, 0) || '-' || lpad (9, 2, '0') || '-2003';
> >>  ?column?
> >>------------
> >> 07-09-2003
> >>(1 row)
> >>
> >>
> >>I hope, it helps...
> >>
> >>Dima
> >>
> >>Yasir Malik wrote:
> >>
> >>
> >>
> >>>Thank you so much!  But my problem is that when I do
> >>>to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
> >>>'9999')
> >>>
> >>>where mn, dy, and yr are ints, is that the output has a space after the
> >>>the dash.  For example, I get
> >>>07- 25- 1994
> >>>
> >>>instead of what I want:
> >>>07-25-1994
> >>>
> >>>Thanks,
> >>>Yasir
> >>>
> >>>On Tue, 8 Jul 2003, Richard Rowell wrote:
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>>Date: 08 Jul 2003 15:21:33 -0500
> >>>>From: Richard Rowell <richard@bowmansystems.com>
> >>>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> >>>>Subject: Re: [SQL] Datatype conversion help
> >>>>
> >>>>On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>>I've tried to_char(in_val, '99'), and that returns a string that is two
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>select to_char(9,'00');
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>---------------------------(end of broadcast)---------------------------
> >>>TIP 8: explain analyze is your friend
> >>>
> >>>
> >>>
> >>>
> >>
> >>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html
>


Re: Datatype conversion help

От
"listrec"
Дата:
I tried

select
to_date(substring(to_char(yr,'0009'),2,4)||substring(to_char(mn,'09'),2,2)||
substring(to_char(dy,'09'),2,4),'YYYYMMDD');

which works fine....

Detlef

-----Ursprungliche Nachricht-----
Von: pgsql-sql-owner@postgresql.org
[mailto:pgsql-sql-owner@postgresql.org]Im Auftrag von Dmitry Tkach
Gesendet: Donnerstag, 10. Juli 2003 00:52
An: Yasir Malik
Cc: pgsql-sql@postgresql.org
Betreff: Re: [SQL] Datatype conversion help


Yasir Malik wrote:

>I used trim and here's what I came up with:
>to_date(trim(to_char(yr, '9999') || trim(to_char(mn, '00')) ||
>trim(to_char(dy, '00'))), 'YYYYMMDD')
>
>Apparently to_char adds a space to the charecter you are casting.
>
>
I know :-)
And lpad doesn't - that's why I suggested it :-)

Dima

>
>On Wed, 9 Jul 2003, Dmitry Tkach wrote:
>
>
>
>>Date: Wed, 09 Jul 2003 18:40:37 -0400
>>From: Dmitry Tkach <dmitry@openratings.com>
>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
>>Cc: pgsql-sql@postgresql.org
>>Subject: Re: [SQL] Datatype conversion help
>>
>>What about lpad?
>>
>>select lpad (7, 2, 0) || '-' || lpad (9, 2, '0') || '-2003';
>>  ?column?
>>------------
>> 07-09-2003
>>(1 row)
>>
>>
>>I hope, it helps...
>>
>>Dima
>>
>>Yasir Malik wrote:
>>
>>
>>
>>>Thank you so much!  But my problem is that when I do
>>>to_char(mn, '00') || '-' || to_char(dy, '00') || '-' || to_char(yr,
>>>'9999')
>>>
>>>where mn, dy, and yr are ints, is that the output has a space after the
>>>the dash.  For example, I get
>>>07- 25- 1994
>>>
>>>instead of what I want:
>>>07-25-1994
>>>
>>>Thanks,
>>>Yasir
>>>
>>>On Tue, 8 Jul 2003, Richard Rowell wrote:
>>>
>>>
>>>
>>>
>>>
>>>>Date: 08 Jul 2003 15:21:33 -0500
>>>>From: Richard Rowell <richard@bowmansystems.com>
>>>>To: Yasir Malik <ymalik@cs.stevens-tech.edu>
>>>>Subject: Re: [SQL] Datatype conversion help
>>>>
>>>>On Tue, 2003-07-08 at 15:07, Yasir Malik wrote:
>>>>
>>>>
>>>>
>>>>
>>>>>I've tried to_char(in_val, '99'), and that returns a string that is two
>>>>>
>>>>>
>>>>>
>>>>>
>>>>select to_char(9,'00');
>>>>
>>>>
>>>>
>>>>
>>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 8: explain analyze is your friend
>>>
>>>
>>>
>>>
>>
>>



---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
              http://www.postgresql.org/docs/faqs/FAQ.html