|
On 14-May-2015 12:24 -0500, Luis Rodriguez wrote:
<<SNIP>> write a SQL function that checks if your number is valid.
Some years ago we had to write a small function in order to check
some bad data we had received from an external provider. Our function
was something like this :
----------------------------------------------------
DROP Function QGPL/IsNumeric;
Create Function QGPL/IsNumeric (@TestData VarChar(64))
Returns Char(1)
Language SQL
Deterministic
Not Fenced
Set Option Commit=*None, UsrPrf=*Owner
BEGIN
Declare @Double Double Not Null Default 0;
Declare InvalidNum condition for '01565';
Declare Exit Handler For InvalidNum
Return 'N';
If @TestData Is Null Then
Return 'N';
End If;
Set @Double=Cast(@TestData As Double);
Return 'Y';
END
----------------------------------------------------
So you could something like:
UPDATE MyTable set MyField = 0
WHERE IsNumeric( cast(MyField as varchar(64)) ) = 'N'
If in that example the MyField is a numeric data-typed column, for which bad-decimal-data exists for some value, then the CAST(MYFIELD...) should fail with a data-mapping-error, just as should reference to the MyField without any [casting] scalar function applied.
The HEX scalar is [AFaIK; ¿I think I read about something new for FIELDPROC that might similarly? the only scalar function supported, for which a data mapping error should and would not occur against a column with bad decimal data. Thus I expect such an endeavor, if as suggested intends to reset the values with bad-data to a zero value, would not be fruitful.
FWiW I find returning 'N' for the NULL value rather than using RETURNS NULL ON NULL INPUT [¿or is that the default and the If..Null predicate is always false?] seem rather contrary to the concept of NULL.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.