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
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

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.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Oracle RAC 12c 8 72
Bash Script to Analyze Oracle Schemas 11 104
Oracle SQL - Query help 7 55
Retreiving column names in Windows but not in Unix 11 47
Note: this article covers simple compression. Oracle introduced in version 11g release 2 a new feature called Advanced Compression which is not covered here. General principle of Oracle compression Oracle compression is a way of reducing the d…
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
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 set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

777 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