Shmewnix
Shmewnix

Reputation: 1573

How to return only numbers from query where column is nvarchar

I have a simple query that is returning records where "column2" > 0

Here is the data in the database

Column1          Column2
1                123456789
2                123456781
3                13-151-1513
4                alsdjf
5                 
6                000000000

Her is the query

 select column1, replace(a.Payroll_id,'-','')
    from table1
    where isnumeric(column2) = 1

I'd like to return the following:

Column1          Column2
1                123456789
2                123456781
3                131511513

This mean, I won't select any records when the column is blank (or null), will not return a row if it's not an integer, and will drop out the '-', and would not show row 6 since it's all 0.

How can I do this?

Upvotes: 1

Views: 107

Answers (2)

Alex
Alex

Reputation: 21766

If you are using SQL2012 or above you can also use TRY_PARSE that is more selective in its parsing. This function will return NULL if a record can't be converted. You could use it like this:

CREATE TABLE #temp
    (
     ID INT IDENTITY ,
     VALUE VARCHAR(30)
    )
INSERT  INTO #temp
       ( VALUE )
VALUES  ( '1213213' ),
       ( '1213213' ),
       ( '121-32-13' ),
       ( 'ASDFASF2123' ),
       ( '0000000' )

SELECT  ParsedValue
FROM   #temp
       CROSS APPLY ( SELECT TRY_PARSE(
                          Value AS INT ) AS ParsedValue
                ) details
WHERE   ParsedValue IS NOT NULL
AND ParsedValue>0

Upvotes: 1

jthalliens
jthalliens

Reputation: 544

I think you can use something like this :

USE tempdb
GO
CREATE TABLE #Temp
(
ID INT IDENTITY
,VALUE VARCHAR(30)
)
INSERT INTO #Temp (VALUE) VALUES ('1213213'), ('1213213'), ('121-32-13'), ('ASDFASF2123')
GO
WITH CteData
AS
(
SELECT REPLACE(VALUE,'-','') as Valor FROM #Temp 
)
SELECT * FROM CteData WHERE (ISNUMERIC(Valor) = 1 AND valor not like '%[0-0]%')
DROP TABLE #Temp 

then you can apply validations for empty, NULL,0 etc

Upvotes: 3

Related Questions