I have a MS SQL table McTable with column BigMacs nvarchar(255). I would like to get rows with BigMacs value greater than 5.
What I do is:
select * from
(
select
BigMacs BigMacsS,
CAST(BigMacs as Binary) BigMacsB,
CAST(BigMacs as int) BigMacsL
from
McTable
where
BigMacs Like '%[0-9]%'
) table
where
Cast(table.BigMacsL as int) > 5
And in result I get an error:
State 1, Line 67 Conversion failed when converting the nvarchar value '***' to data type int.
But when I remove last filter where Cast(table.BigMacsL as int) > 5
it works and I get this result:
6 0x360000000000000000000000000000000000000000000000000000000000 6 23 0x320033000000000000000000000000000000000000000000000000000000 23 22 0x320032000000000000000000000000000000000000000000000000000000 22 24 0x320034000000000000000000000000000000000000000000000000000000 24 25 0x320035000000000000000000000000000000000000000000000000000000 25 3 0x330000000000000000000000000000000000000000000000000000000000 3 17 0x310037000000000000000000000000000000000000000000000000000000 17 17 0x310037000000000000000000000000000000000000000000000000000000 17 19 0x310039000000000000000000000000000000000000000000000000000000 19 20 0x320030000000000000000000000000000000000000000000000000000000 20 659 0x360035003900000000000000000000000000000000000000000000000000 659 1 0x310000000000000000000000000000000000000000000000000000000000 1 43 0x340033000000000000000000000000000000000000000000000000000000 43 44 0x340034000000000000000000000000000000000000000000000000000000 44 45 0x340035000000000000000000000000000000000000000000000000000000 45 46 0x340036000000000000000000000000000000000000000000000000000000 46 47 0x340037000000000000000000000000000000000000000000000000000000 47 44 0x340034000000000000000000000000000000000000000000000000000000 44 44 0x340034000000000000000000000000000000000000000000000000000000 44 47 0x340037000000000000000000000000000000000000000000000000000000 47 43 0x340033000000000000000000000000000000000000000000000000000000 43 50 0x350030000000000000000000000000000000000000000000000000000000 50 44 0x340034000000000000000000000000000000000000000000000000000000 44
And when I change in first query 'select * from' to 'select top 18 * from' than I do not get error too!
I don't know what is the problem and how to make it work! Could you please help me?
Once again: what I try to accomplish here is to get these McTable rows that have BigMacs value greater than 5.
UPDATE
Steps to reproduce this error:
I've prepared queries so You can easily get this error on your database:
Create database TestDB, create table with:
USE [TestDB]
GO
/****** Object: Table [dbo].[TestTable] Script Date: 04/08/2009 16:27:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TestTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[MyVal] [nvarchar](255) COLLATE Polish_CI_AS NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
insert values with:
delete from TestDB.dbo.TestTable
insert into TestDB.dbo.TestTable (MyVal) values ('fd')
insert into TestDB.dbo.TestTable (MyVal) values ('54543534')
insert into TestDB.dbo.TestTable (MyVal) values ('fat3tv3gv5')
insert into TestDB.dbo.TestTable (MyVal) values ('fdf4v43 4v434v')
insert into TestDB.dbo.TestTable (MyVal) values (' g dfg dfg df')
insert into TestDB.dbo.TestTable (MyVal) values ('f sd 4t4gsdf')
insert into TestDB.dbo.TestTable (MyVal) values ('f df 4 trwefg')
insert into TestDB.dbo.TestTable (MyVal) values ('f sd f4 fgsfg sd')
insert into TestDB.dbo.TestTable (MyVal) values ('54534534')
insert into TestDB.dbo.TestTable (MyVal) values ('454')
This query:
select
CAST(MyVal as int) MyValInt
from
dbo.TestTable
where
IsNumeric(MyVal) = 1
results in valid numbers as shown below:
54543534
54534534
454
And when you try to get filtered values with this query:
select
*
from
(
select
CAST(MyVal as int) MyValInt
from
dbo.TestTable
where
IsNumeric(MyVal) = 1
) tabela
where
tabela.MyValInt > 6
You should get this error that should not occur:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the nvarchar value 'fd' to data type int.