Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine the field value which can not convert to (decimal, float,int) in SQL Server

I have a SQL Server database.

One field has values which are like

 ID      VALUE
  1      NEGATIF
  2      11.4
  3      0.2
  4      A RH(+)
  5      -----
  6      >>>>>
  7      5.6<
  8      -13.9

I want to CONVERT VALUE field to decimal, of course convert-able fields.

  1. What kind of SQL statement can do this?

  2. How can I understand which value is raising error while converting?

PS: I think this can solve WHERE VALUE LIKE '[a-z]' but how can I add more filter like [-+ ()] ?

like image 477
uzay95 Avatar asked Dec 23 '10 20:12

uzay95


People also ask

Can we convert float to int in SQL?

Convert Float to Int In this example, we will convert a float data type to integer. In the following query, we will declare a variable that data type is float and then we will use the SQL CONVERT function in order to convert float value to integer so for that we will perform data converting operation.

Can an int be a decimal SQL?

As we know from before, integers are whole numbers, or numbers with no fractions (i.e. no decimal places). This is going to be in the test later, so pay attention. In other words, the numbers 0 through 9 are integers, but a floating point or decimal / numeric value is not an integer.

How do I select decimal value in SQL?

Use the CAST() function to convert an integer to a DECIMAL data type. This function takes an expression or a column name as the argument, followed by the keyword AS and the new data type. In our example, we converted an integer (12) to a decimal value (12.00).


1 Answers

Plain ISNUMERIC is rubbish

  • Empty string, +, - and . are all valid
  • So is +. etc
  • 1e-3 is valid for float but not decimal (unless you CAST to float then to decimal)

For a particularly cryptic but failsafe solution, append e0 or .0e0 then use ISNUMERIC

SELECT
   ISNUMERIC(MyCOl + 'e0')   --decimal check,
   ISNUMERIC(MyCOl + '.0e0')  --integer check

So

SELECT
    ID, VALUE,
    CAST(
          CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
          AS decimal(38, 10)
        ) AS ConvertedVALUE
FROM
    Mytable
like image 187
gbn Avatar answered Nov 16 '22 00:11

gbn