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