解决SQL将varchar值转换为数据类型为int的列时发生语法错误

今天遇到一个这样的错误,具体的报错情况如下

解决的方案如下。

数据库MSSQL在比较大小时,出错提示:“将 varchar 值 ‘24.5‘ 转换为数据类型为 int 的列时发生语法错!”分析数据库设计列时的类型为VARCHAR,当搜索比较语句执行 “select * from datalist where price>10 order by id ”时即报告以上错误。
   琢磨下,只要price列里含有小数,就出错,而price为varchar类型,必须转换为数字类型。

可以这样改写:“select * from datalist where convert(int,convert(numeric(18,9),price))>10 order by id ”

或者也可以这样写:“select * from datalist where convert(int,cast(price as float))>10 order by id ”可以解决问题。

即先把varchar的類型轉換為數字,然后再转为int即可。

另外一个思路:在数据录入的时候,就判断是否是整数,并且强制转换如,int(price),也同样可以避免日后 SQL 比较时,转换出错。

附录,问题类型同上:

sql 将 varchar 值转换为数据类型为 int 的列时发生语法错误的解决办法;

group表有个varchar 的字段groupPower,值为1,2,3,4,有个sql语句为
select * from dbo.function where
functionId in
(
select groupPower from dbo.group
where groupid=1
)
执行出错将 varchar 值 ‘1,2,3,4‘ 转换为数据类型为 int 的列时发生语法错误。

解决方法:
将where 条件改为:
where charindex(rtrim(functionId), (select top 1 groupPower from loan_group where groupid=1 ))>0

时间: 2024-10-10 21:24:16

解决SQL将varchar值转换为数据类型为int的列时发生语法错误的相关文章

金蝶KIS新建账套时 从字符串向DateTime转换时失败 从字符串转换为Datetime类型时发生语法错误

需要修改以下几点 控制面板---区域和语言选项---区域选项---自定义,修改为如下格式

在Sql中将 varchar 值 '1,2,3,4,5,6' 转换成数据类型 int

--问题:将aa转换为Int类型失败 string aa="3,5,11,56,88,45,23"; select * from ERPBuMen where ID in(aa) ; --方法select * from ERPBuMen where charindex(','+ltrim(ID)+',',','+'3,5,11,56,88,45,23'+',')>0 ltrim(rtrim(m.cust_id)) 去掉cust_id字段的左右空格 CHARINDEX 返回字符串中

安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程

       问题:在服务器(操作系统为Windows server 2012)上安装SQL Server 2012的过程中,安装停留在下图所示的界面上,显示”正在启用操作系统功能NetFx3”随后出现提示框,告知启用windows功能NetFx3时出错. 分析:NetFx3指的是.NET Framework 3.5,SQL Server 2012数据库系统的运行需要依靠.NET Framework 3.5,但是Windows Server2012默认情况下是并没有安装.NET Framewor

使用vs2015编译器编译libpqxx时发生的错误以及解决办法

d:\libpqxx-4.0\libpqxx-4.0\src\strconv.cxx(195): error C2440: "=": 无法从"std::basic_istream<char,std::char_traits<char>>"转换为"bool"d:\libpqxx-4.0\libpqxx-4.0\src\strconv.cxx(195): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运

Access提示Insert Into 语法错误解决办法总结

1.关键字:如果你的数据库的表的设计包含了Access包含的关键字,则在插入的时候会出现“Insert Into 语法错误” 例如: string sqlText = String.Format("Insert into TestTable(Id,Order) values ({0},{1})",123,0); 这行上面这条语句是失败的,原因是TestTable表中有一个关键字"Order",解决办法: (1).将语句中的关键字用[order]处理就可以了.如: s

ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法

http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法 在ASP.NET中使用 <authentication mode="Forms">时,如果在forms配置节中,没有指定loginUrl,那么根据MSDN上的说法,默认值是login.aspx,在指定loginUrl时,就使用指定的Url

sql in(1,2,3)参数化查询,错误在将 varchar 值 &#39;1,2,3,4&#39; 转换成数据类型 int 时失败

解决办法 string userIds = "1,2,3,4";using (SqlConnection conn = new SqlConnection(connectionString)){ conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = string.Format("select * from Users(nolock) where U

使用的 SQL Server 版本不支持数据类型“datetime2”解决办法

错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008,但后来实际使用中使用的数据库是sqlserver 2005 使用的 SQL Server 版本不支持数据类型“datetime2” The version of SQL Server in use does not support datatype ‘datetime2 解决办法 Open your EDMX in a file editor (or “open with…” in Vis

在将 varchar 值 &#39;2,7&#39; 转换成数据类型 int 时失败

消息 245,级别 16,状态 1,第 1 行在将 varchar 值 '2,7' 转换成数据类型 int 时失败. 原sql select  UserName from s_User  where Id in ( select UndertakerList from ZW_HandlerSend where HsID=7 ) 改成 select  UserName from s_User  where  charindex(rtrim(Id), (select top 1 Undertaker