Solved

Next Working Day PLPGSQL Function

Posted on 2008-06-16
3
584 Views
Last Modified: 2008-06-17
I am trying to write a PLPGSQL function which will return the next working day for a given date. However when I try to run the query:

select next_working_day('16/06/2008'); it gives me the error
ERROR:  syntax error at or near "$1" at character 37
I have tried different date formats incase it was wanting it in the format yyyy/mm/dd etc but still the same error
Can anyone see where I am going wrong here?
DECLARE
       dowCheck RECORD;
       timeCheck ALIAS FOR $1;
       nextWorkingDay INTEGER;
BEGIN
 
SELECT extract(dow FROM TIMESTAMP timeCheck) AS dow INTO dowCheck;
 
IF dowCheck.dow>4 THEN
   dowCheck.dow = 1;
ELSE
    dowCheck.dow = (dowCheck.dow + 1);
END IF;
return dowCheck.dow;
END;

Open in new window

0
Comment
Question by:tricl
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 14

Accepted Solution

by:
tusharkanvinde earned 500 total points
ID: 21794150
CREATE OR REPLACE FUNCTION temp(timestamp)
  RETURNS int2 AS
$BODY$

SELECT cast((case when extract(dow FROM  $1)>4 then 1 else extract(dow FROM  $1)+1 end) as int2) AS dow INTO dowCheck;

$BODY$
  LANGUAGE 'sql' VOLATILE;

The function parameter is a timestamp and not a string
0
 

Author Comment

by:tricl
ID: 21794512
Thanks for the fast reply, I have one more function which is suffering similar problems:
I have tried using a cast to convert the result which I guess is a double into in2 to find out if it is between 0 and 6 however I get the same $1 error.

Obviously I will accept your solution, but could you have a quick look at this other query within the points I am awarding?

Cheers
SELECT cast(extract(DOW FROM TIMESTAMP $1) as int2) AS doweek INTO dowCheck;
 
IF (dowCheck.doweek>0) AND (dowCheck.doweek<6) THEN
   RETURN TRUE;
ELSE
   RETURN FALSE;
END IF;

Open in new window

0
 
LVL 14

Expert Comment

by:tusharkanvinde
ID: 21795373
Glad it works for you. Try this

CREATE OR REPLACE FUNCTION doweek("timestamp")
  RETURNS bool AS
$BODY$
select case when  extract(dow from $1) between 1 and 5 then true else false end as doweek;
$BODY$
  LANGUAGE 'sql' VOLATILE;
0

Featured Post

Get Database Help Now w/ Support & Database Audit

Keeping your database environment tuned, optimized and high-performance is key to achieving business goals. If your database goes down, so does your business. Percona experts have a long history of helping enterprises ensure their databases are running smoothly.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Good documentation 1 198
postgresql 4 205
Posting JSON array from one php file to another 17 192
Need help on taking backup in postgress SQL -- Challenging question 4 68
Best database to use for Maps is PostgreSQL. This is an open source database. Comes as a package with most Linux OS. For more info visit the following site: http://www.postgresql.org/ (http://www.postgresql.org/) This requires some add-o…
Many developers have database experience, but are new to PostgreSQL. It has some truly inspiring capabilities. I have several years' experience with Microsoft's SQL Server. When I began working with MySQL, I wanted a quick-reference to MySQL (htt…
Steps to create a PostgreSQL RDS instance in the Amazon cloud. We will cover some of the default settings and show how to connect to the instance once it is up and running.
Suggested Courses

751 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question