作业帮 > 综合 > 作业

select *from table_namewhere isnumeric(field_name) = 0 or (c

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 11:44:02
select *
from table_name
where isnumeric(field_name) = 0 or (charindex('.',field_name) > 0 and isnumeric(field_name) = 1 and floor(field_name) ceiling(field_name))
其中field_name是nvarchar类型的,floor()和ceiling()括号里的要求是numeric类型的,会出问题的,
不可能出问题的,where条件是有执行顺序的.如果isnumeric(field_name) = 0成立也就是说不是数字的话,or后面的语句是不会被执行的,也就谈不上floor里要求什么值了.
再问: where是有执行顺序,但or是或,这个条件的意思是或者不是数字,或者是数字但不是整数,就在这里会弹出错误:从数据类型 nvarchar 转换为 float 时出错;
再答: 没理由啊,我随便找个table,field测了一下,没问题啊,吧你的出错数据贴出来看看
再问: 我测试了半天,原来数据中还有1,5这种数据, select * from table_name where charindex('.', field_name) = 0 and isnumeric(field_name) = 1 执行之后,这条数据会被查询出来,不报错,加上floor(field_name) = ceiling(field_name)就出现那个错误
再答: 没想到"1,5"也算numeric,用下面的sql就可以了(会把1,5选出来,不会出错): select * from table_name where isnumeric(field_name) = 0 or CHARINDEX(',', field_name) > 0 or (charindex('.', field_name) > 0 and isnumeric(field_name) = 1 and floor(field_name) ceiling(field_name))