Trouble with Date concatenation with varchar2 string in oracle

Posted on 2008-10-26
Last Modified: 2013-12-07
I'm trying to concatenate dates with other Sql statements so I can place common Where statements in 1 procedure.

I am running into troubles with the date.
What is happening is To and From dates are in format dd-mm-yyyy as in 10-01-2008

When I concatenate into v_SQL which is varchar2 it becomes dd-MONth- YY as in 10-JAN-08

Can somebody please explain why and how to fix?
-- v_inputdate is varchar2

v_SQL varchar2(1000);

 v_strTmp varchar2(100);

 v_WhereSet number;

 v_ToDate DATE;

 v_FromDate DATE; 




 -- Input Date


  If Length(v_InputDate) > 0 Then

  -- Date that is input is 10th January 2008

	v_FromDate := To_Date(v_InputDate,'dd-mm-yyyy');

-- I am now 10-01-2008	

If v_ReportType = 'D' Then

		v_ToDate := v_FromDate + 1 ;

-- I am now 11-01-2008

	 End If; 


	 If v_WhereSet = 1 Then

		v_strTmp := ' AND ';


		v_WhereSet := 1;

		v_strTmp := ' WHERE  ';		

	 End If;

	 v_SQL := v_SQL || v_strTmp || ' pr.pres_dt >= ' || v_FromDate || 

				 ' AND pr.pres_dt < '  || v_ToDate;   

-- At this point v_SQL changes to have v_FromDate as 10-JAN-08  

-- My data is stored as dd-mm-yyyy.

  End If;

Open in new window

Question by:cmrnp
LVL 10

Accepted Solution

dbmullen earned 500 total points
Comment Utility
well..   you're really making things hard on your self...

hard way:
         v_SQL := v_SQL || v_strTmp || ' pr.pres_dt >= to_date(''' || to_char(v_FromDate,'yyyymmdd') ||
                                ''',''yyyymmdd'')  AND pr.pres_dt < to_date('''  || to_char(v_ToDate,'yyyymmdd') || ''',''yyyymmdd'')';

easy way:
         v_sql := 'select count(*) from use_binds pr where pr.pres_dt >= :v_from_date and pr.pres_dt < :v_todate';        
         execute immediate v_sql into yadda using v_fromdate, v_todate;

create table use_binds as select sysdate pres_dt from dual;

set serveroutput on


v_sql varchar2(3000);

v_strtmp varchar2(100) := 'table';

v_fromdate date := trunc(sysdate);

v_todate   date := trunc(sysdate) + 1;

yadda number(10) := 0;


         v_SQL := v_SQL || v_strTmp || ' pr.pres_dt >= to_date(''' || to_char(v_FromDate,'yyyymmdd') || 

                                ''',''yyyymmdd'')  AND pr.pres_dt < to_date('''  || to_char(v_ToDate,'yyyymmdd') || ''',''yyyymmdd'')';




         v_sql := ' ' ;

         v_sql := 'select count(*) from use_binds pr where pr.pres_dt >= :v_from_date and pr.pres_dt < :v_todate';



         execute immediate v_sql into yadda using v_fromdate, v_todate;

         dbms_output.put_line(to_char(yadda) );



Open in new window


Author Closing Comment

Comment Utility

Most questions i've had have not been answered but this was spot on.

Thanks heaps.

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Article by: Swadhin
From the Oracle SQL Reference ( we are told that a join is a query that combines rows from two or more tables, views, or materialized views. This article provides a glimps…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
This video explains at a high level with the mandatory Oracle Memory processes are as well as touching on some of the more common optional ones.
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.

772 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now