× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Staying with SQL, even with SUBSTRINGs and CASE statements will probably
perform better.
However, external UDFs are just cooler :)

Per Charles Wilt's inspiration, try this:

/* START C SOURCE */
#include <time.h>
#include <decimal.h>

void getNumericDate(
char * inDate,
decimal(8,0) * out,
short * ind1,
short * outind,
char * sqlstate,
char * funcname,
char * specname,
char * msgtext)
{
struct tm tm;
char buffer[9] = {0};
strptime(inDate,"%d/%b/%Y",&tm);
strftime(buffer,sizeof(buffer)-1,"%Y%m%d",&tm);
*out = atoi(buffer);
outind = 0;
}
/* END C SOURCE */

/* compile C source into a MODULE object */
CRTCMOD MODULE(MYLIB/MYSRVPGM) SRCFILE(MYLIB/QCSRC)
/* create a *SRVPGM to be used as an external UDF target */
CRTSRVPGM SRVPGM(MYLIB/MYSRVPGM) EXPORT(*ALL)

STRSQL

/* create an external UDF to leverage in your SQL code */
CREATE FUNCTION QGPL/getNumericDate(inDate varchar(11))
RETURNS DECIMAL(8,0)
RETURNS NULL ON NULL INPUT
NOT FENCED
NO SQL
NO EXTERNAL ACTION
DETERMINISTIC
LANGUAGE C
PARAMETER STYLE SQL
EXTERNAL NAME 'MYLIB/MYSRVPGM(getNumericDate)'

/* test UDF */
SELECT getNumericDate(myMessyDateField) FROM myLib/myFile

Or do the same in RPG if you prefer.

Elvis

Celebrating 11-Years of SQL Performance Excellence on IBM i, i5/OS and
OS/400
www.centerfieldtechnology.com


-----Original Message-----
Subject: Re: Using SQL to convert date

Dean,

Consider building a UDF around the strptime()? Convert String to Date/Time
API.

HTH,
Charles

On Thu, Sep 3, 2009 at 3:09 PM, <Dean.Eshleman@xxxxxxxxxxxxxx> wrote:
Hi,

Using SQL, I'm trying to figure out how to convert a character field that
contains '27/Aug/2009' into an 8 digit numeric date in the format
20090827.  After the conversion, I want to load it into a field in the
same record.  I know I can substring out the year and the day.  The tough
part is converting the month.  Is a CASE statement my only option?  TIA

Dean Eshleman,
MMA, Inc.




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.