Thread: mapping date value (SQL question)
Howdy:
I'm running Postgres 7.1.3 on RedHat Linux 7.2, kernel version
2.4.7 rel 10.
I've created a table which includes the date. I have been instructed
to map the date into something that reflects the quarter of the year
on the fly (somewhere in the script). For example:
(currently) date: (needed) quarter:
2001-02-26 200101
1998-05-12 199802
803-11-11 80304
I was thinking I'd have to use something like a case statement, but
I don't know enough about SQL to do something like that. Somehow, I
had the notion that if it were possible to write 'if-then-else' loops
I could probably do it.
Is there such a mechanism to do what is being asked of me?
Thanks!
-X
You have in plpgsql the ability to use IF THEN ELSIF ELSE Also in pure SQL you can use the CASE WHEN THEN END Example: Case Statement CASE WHEN status = 1 THEN Draft WHEN status = 2 THEN Open WHEN status = 3 THEN Complete WHEN status = 4 THEN Closed ELSE undefined End AS status Example: PLPGSQL IF subject = ''Location'' THEN /* Code goes here */ ELSIF subject = ''Device'' THEN /* Code goes here */ ELSE /* Code goes here */ END IF; Hope this helps Darren Ferguson On Thu, 21 Feb 2002, Johnson, Shaunn wrote: > Howdy: > > I'm running Postgres 7.1.3 on RedHat Linux 7.2, kernel version > 2.4.7 rel 10. > > I've created a table which includes the date. I have been instructed > to map the date into something that reflects the quarter of the year > on the fly (somewhere in the script). For example: > > (currently) date: (needed) quarter: > 2001-02-26 200101 > 1998-05-12 199802 > 803-11-11 80304 > > I was thinking I'd have to use something like a case statement, but > I don't know enough about SQL to do something like that. Somehow, I > had the notion that if it were possible to write 'if-then-else' loops > I could probably do it. > > Is there such a mechanism to do what is being asked of me? > > Thanks! > > -X >
-----Original Message-----
From: Mancz, JamesHow about:SELECT date_part('y', datefield) || date_part('qtr', datefield)FROM tablename;-----Original Message-----
From: Johnson, ShaunnHowdy:
I'm running Postgres 7.1.3 on RedHat Linux 7.2, kernel version
2.4.7 rel 10.I've created a table which includes the date. I have been instructed
to map the date into something that reflects the quarter of the year
on the fly (somewhere in the script). For example:(currently) date: (needed) quarter:
2001-02-26 200101
1998-05-12 199802
803-11-11 80304I was thinking I'd have to use something like a case statement, but
I don't know enough about SQL to do something like that. Somehow, I
had the notion that if it were possible to write 'if-then-else' loops
I could probably do it.Is there such a mechanism to do what is being asked of me?
Thanks!
-X
If you want the leading zero, modify it to be like this; SELECT date_part('y', datefield) || '0' || date_part('qtr', datefield) FROM tablename; -----Original Message----- From: Johnson, Shaunn [mailto:SJohnson6@bcbsm.com] Sent: 21 February 2002 14:32 To: 'Mancz, James'; 'pgsql-general@postgresql.org' Subject: RE: [GENERAL] mapping date value (SQL question) --that's close. but i need the '0' in the field between the year and the quarter. --all of this because a company want's fixed length columns. --i was reading about something like this: [example] select to_char(to_date('05/21/1998'),'Q') from dual [/example] --trying to modify it somehow ... --thanks! -X -----Original Message----- From: Mancz, James How about: SELECT date_part('y', datefield) || date_part('qtr', datefield) FROM tablename; -----Original Message----- From: Johnson, Shaunn Howdy: I'm running Postgres 7.1.3 on RedHat Linux 7.2, kernel version 2.4.7 rel 10. I've created a table which includes the date. I have been instructed to map the date into something that reflects the quarter of the year on the fly (somewhere in the script). For example: (currently) date: (needed) quarter: 2001-02-26 200101 1998-05-12 199802 803-11-11 80304 I was thinking I'd have to use something like a case statement, but I don't know enough about SQL to do something like that. Somehow, I had the notion that if it were possible to write 'if-then-else' loops I could probably do it. Is there such a mechanism to do what is being asked of me? Thanks! -X
On Thu, 2002-02-21 at 09:31, Johnson, Shaunn wrote: > --that's close. but i need the '0' in the field between the > year and the quarter. > > --all of this because a company want's fixed length columns. > > --i was reading about something like this: > > [example] > > select to_char(to_date('05/21/1998'),'Q') from dual > > [/example] > > --trying to modify it somehow ... > > --thanks! > > -X Are you talking about showing the quarter as 01 or 02 instead of 1 or 2? If so, just convert the quarter to a character using casting I suppose and insert the 0 in front of it. What are you using to provide the reports? It would probably be a lot easier to let those tools do the work for you. Perl or PHP could easily make the quarter look like 01 or 02. -- Jeff Self Information Technology Analyst Department of Personnel City of Newport News 2400 Washington Ave. Newport News, VA 23607 757-926-6930
> "Johnson, Shaunn" wrote: > I've created a table which includes the date. I have been instructed > to map the date into something that reflects the quarter of the year > on the fly (somewhere in the script). For example: > (currently) date: (needed) quarter: > 2001-02-26 200101 > 1998-05-12 199802 > 803-11-11 80304 > Is there such a mechanism to do what is being asked of me? select date_part('quarter', date 'now'); gets you the current quarter, and select date_part('year', date 'now') || date_part('quarter', date 'now'); gets you both year and quarter. However, you may want to use the to_char() functionality to get more control over the formatting: select to_char(date 'now', 'YYYY0Q'); Good luck! - Thomas