×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




Hi Rob,

Thanks for the response. You're right, '123.45' would not get picked up as numeric. I like Birgitta's response about using %dec with a monitor around it.

To my taste, I prefer to only use the %dec test when the incoming text value has a period in it to avoid getting job log entries for values that are not numeric and don't contain periods. So I added in the following code after the %check.

// If not all numbers, but contains a period, then check to
// see if this is a number with a decimal.
ElseIf %scan( '.': checkText ) > 0;
Monitor;
number = %dec( checkText: 33: 9 );
rtnNumeric = *On;
On-Error;
rtnNumeric = *Off;
EndMon;

I'm glad my attempt to help resulted in others helping me as well.

-Kurt

-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of rob@xxxxxxxxx
Sent: Tuesday, January 15, 2013 11:54 AM
To: Midrange Systems Technical Discussion
Subject: RE: SQL is numeric function

Gives an example of how to extend your rpg subprocedure to become a UDF and then be used by SQL but the rpg may be a bit simplistic. For example,
123.45 would not be numeric. Just adding a period to the check string may not be sufficient for the example another poster gave: 123.156.121.45 or some such thing. That's 'numeric' enough for an IP address but not numeric for mathematical functions.


Rob Berendt
--
IBM Certified System Administrator - IBM i 6.1 Group Dekko Dept 1600 Mail to: 2505 Dekko Drive
Garrett, IN 46738
Ship to: Dock 108
6928N 400E
Kendallville, IN 46755
http://www.dekko.com





From: "Anderson, Kurt" <KAnderson@xxxxxxxxxxxx>
To: Midrange Systems Technical Discussion <midrange-l@xxxxxxxxxxxx>,
Date: 01/15/2013 12:47 PM
Subject: RE: SQL is numeric function
Sent by: midrange-l-bounces@xxxxxxxxxxxx



Hi Joel,

I actually created my own and don't mind sharing.

Here's the function. xxxLIB is the library you'll be placing it in.
Create or Replace Function xxxlib/isNumeric ( VALUE VarChar(25) )
returns Char(1)
language rpgle
no sql
specific ccdlib/isNumericV
external name 'xxxLIB/TEXTPROCS($ISNUMERIC)'
parameter style general
;

I have a second overloaded function that handles being passed a number.
Sounds obvious I suppose, but meh.
Create or Replace Function xxxlib/isNumeric ( VALUE dec(25,9) )
returns char(1)
language sql
deterministic
specific xxxlib/isNumericN
return '1'
;

Here's the procedure to check if the input is numeric.
As you see in the procedure above, I have it in a service program called
TEXTPROCS (text procedures service program). You can put it wherever.


//=======================================================================*
// Procedure: $isNumeric *
// Description: Is the Input Numeric? *
// *
// Notes: This procedure is also wrapped in a SQL User
Defined *
// Function located in CCDLIB/QSQL(ISNUMERIC) *
// *
// Parameters: *
// Input - Text to test *
// Inp/Out - n/a *
// Output - n/a *
// *
// Return Value: '1' - Numeric *
// '0' - Not Numeric *
// *

//-----------------------------------------------------------------------*
P $isNumeric B Export
D PI n
D epText 25a Const Varying

// Local Constants
D NUMBERS C '0123456789'

// Local variables
D checkText S Static Like( epText )
D rtnNumeric S n Static

//-----------------------------------------------------------------------*
/free

checkText = %trim( epText );

// If the length is zero, it's not numeric.
If %len( checkText ) = 0;
rtnNumeric = *Off;

// If only numbers were found, it is numeric.
ElseIf %check( NUMBERS: checkText ) = 0;
rtnNumeric = *On;

// Otherwise it's not numeric.
Else;
rtnNumeric = *Off;
EndIf;

Return rtnNumeric;

/end-free
P $isNumeric E

//-----------------------------------------------------------------------*


- Kurt Anderson

-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx [
mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Stone, Joel
Sent: Tuesday, January 15, 2013 10:51 AM
To: midrange-l@xxxxxxxxxxxx
Subject: SQL is numeric function

Does Iseries SQL have a numeric test?

For example:

Runsql 'select * from ItemMaster where itemNbr is not numeric'



______________________________________________________________________
This outbound email has been scanned for all viruses by the MessageLabs
Skyscan service.
For more information please visit http://www.symanteccloud.com
______________________________________________________________________
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list To post a message email: MIDRANGE-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/midrange-l.


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