How sql server convert varchar to int?

11.9K    Asked by DelbertRauch in SQL Server , Asked on Apr 24, 2021

I came across an issue today, and while I was able to fix it, I am unsure what caused the issue to happen. I have a column that is Varchar(20). It is used to store just year data (2010, 2011, etc.) it is being converted to an Int data type, but when the command below is ran, an error code happens.ALTER TABLE mytable ALTER COLUMN1 int NULL The error displayed is: Conversion failed when converting the varchar value '2010.' to data type int.There are 3 rows in the table with the value of 2010 in Column1, but NO rows with '2010.' (period and 10 spaces) as a value. I ran select len(Column1) from MyTable where Column1 like ' 10%' I got 2 rows with a length of 4, and 1 with a length of 5. After updating the row with 5 length to have 2010 as the value, the table could be altered. I am curious where the period and spaces came from here. Also curious how 1 character length increase results in a period and 10 spaces. I am thinking something along the lines of a carriage return or line feed, but I can't find any data to back that up, its just a hunch. How sql server convert varchar to int?



Answered by Elayne Balding

SQL server converts varchar to int type with the help of cast and convert functions. The varchar variable must contain numeric characters. SELECT CAST('77788' AS INT); SELECT CAST(CAST ('888.67' AS NUMERIC) AS INT).

You'd need to determine exactly what character was in the original string. Hopefully you have a copy of the original somewhere. I'm guessing it wasn't actually a full stop even if it displayed as one. This query may help

  declare @s table ( col varchar(20) not null ); insert @s(col) values ('2010'), ('2010. '); ;with Numbers as ( select top(20) rn = ROW_NUMBER() over (order by (select 1)) from sys.objects as o ) select s.col, n.rn, SUBSTRING(s.col, n.rn, 1), ASCII(SUBSTRING(s.col, n.rn, 1)), UNICODE(SUBSTRING(s.col, n.rn, 1)) from @s as s cross apply Numbers as n where n.rn < = DATALENGTH(s.col) and s.col like ' 10%' order by s.col, n.rn;


Your Answer

Answer (1)

In SQL Server, you can convert a varchar (or any other compatible data type) to an int using the CAST or CONVERT functions. Here's how you can do it:

  SELECT CAST('123' AS INT) AS ConvertedValue;

Using CONVERT:

SELECT CONVERT(INT, '123') AS ConvertedValue;

Both methods will convert the string '123' to an integer value of 123. Make sure that the varchar value you are converting can be safely cast to an int. If the varchar value contains non-numeric characters, or if it exceeds the range of valid integer values, the conversion will fail, and you may encounter errors.




6 Months

Interviews

Parent Categories