Improve company productivity with a Business Account.Sign Up

x
?
Solved

Next Working Day PLPGSQL Function

Posted on 2008-06-16
3
Medium Priority
?
610 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
  • 2
3 Comments
 
LVL 14

Accepted Solution

by:
tusharkanvinde earned 2000 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

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

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…
By, Vadim Tkachenko. In this article we’ll look at ClickHouse on its one year anniversary.
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.
Watch the video to learn how one can deal with PST file corruption issue with an outstanding Kernel for Outlook PST Repair Tool easily. Using this tool, non-technical users can swiftly perform the repair process to restore their essential data witho…

606 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