Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Next Working Day PLPGSQL Function

Posted on 2008-06-16
3
Medium Priority
?
605 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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

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…
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.
Loops Section Overview
Suggested Courses

971 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