Trouble with Date concatenation with varchar2 string in oracle

Posted on 2008-10-26
Medium Priority
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
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
LVL 10

Accepted Solution

dbmullen earned 2000 total points
ID: 22810072
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

ID: 31510189

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

Thanks heaps.

Featured Post

Get your Disaster Recovery as a Service basics

Disaster Recovery as a Service is one go-to solution that revolutionizes DR planning. Implementing DRaaS could be an efficient process, easily accessible to non-DR experts. Learn about monitoring, testing, executing failovers and failbacks to ensure a "healthy" DR environment.

Question has a verified solution.

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

Background In several of the companies I have worked for, I noticed that corporate reporting is off loaded from the production database and done mainly on a clone database which needs to be kept up to date daily by various means, be it a logical…
From implementing a password expiration date, to datatype conversions and file export options, these are some useful settings I've found in Jasper Server.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.
Suggested Courses

770 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