Groups | Blog | Home
all groups > sql server (alternate) > december 2006 >

sql server (alternate) : Converting a varchar to int


Patti
12/12/2006 7:04:06 AM
I am struggling with converting a certain varchar column into an int.
I have a table that has 2 fields - one field holds the loan number and
the other field holds the codes associated with that loan number.
Here's some example data:

Loan# Codes
11111 24-13-1
22222 1
33333 2-9

I need to check the Codes field for certain code numbers. The Select
statement I'd like to use is:

SELECT Loan#
FROM Table1 WHERE Codes IN (2, 13, 1)
/*My desired results is that all loans from the above example would be
selected because they all have one of these codes*/

Of course I cannot use the above statement because the Codes field is a
varchar. And if I put single quotes around the numbers in my IN
statement I don't get the desired results; the fields with multiple
codes are excluded.

But how do I convert this varchar to an int? A simple convert or cast
statement doesn't work. I've looked all over the web to find how to do
this, but have not been able to figure it out. Any help would be much
appreciated.
Patti
12/12/2006 8:53:32 AM
I can't change the actual table, but I can create a stored proc that
inserts it correctly into another table. I didn't even think to do
that (**duh**)! Thank you very much for your assistance!


[quoted text, click to view]
Ed Murphy
12/12/2006 4:25:11 PM
[quoted text, click to view]

A classic violation of first normal form:

http://en.wikipedia.org/wiki/First_normal_form#Multiple_meaningful_values_in_a_single_field

If at all possible, change your table to look like this:

Loan# Code
11111 24
11111 13
11111 1
22222 1
33333 2
33333 9

[quoted text, click to view]

and then this simply becomes

SELECT Loan#
FROM Table1
WHERE Code in (2, 13, 1)

That said, if fixing the 1NF violation will take a while, then in the
short term, you can do something like the following. (You can't convert
Codes to int, because e.g. '24-13-1' isn't a number. Instead, you must
convert the search terms from int to varchar.)

SELECT Loan#
FROM Table1
WHERE '-'+Codes+'-' like '-2-'
OR '-'+Codes+'-' like '-13-'
OR '-'+Codes+'-' like '-1-'

Also, you may need SELECT DISTINCT, in case some Loan#s have multiple
othellomy NO[at]SPAM yahoo.com
12/12/2006 8:08:45 PM
This might work:
SELECT Loan#
FROM Table1
WHERE patindex('%[2,13,1]%',Codes) > 0

[quoted text, click to view]
Erland Sommarskog
12/12/2006 10:43:08 PM
Ed Murphy (emurphy42@socal.rr.com) writes:
[quoted text, click to view]

Seems like some % are missing.


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
Ed Murphy
12/13/2006 4:25:48 AM
[quoted text, click to view]

Yes, of course you're right, should be

WHERE '-'+Codes+'-' like '%-2-%'
OR '-'+Codes+'-' like '%-13-%'
OR '-'+Codes+'-' like '%-1-%'

but the approach of "use a stored procedure to copy the data to a
better-normalized table" is probably better. (Oh, and that new
AddThis Social Bookmark Button