有一张表 某字段 是nvarchar的,里面存了浮点型数字,有一位小数也有两位小数。请问如何分别查询出带有一位小数点的所有记录和带有两位小数点的所有记录?select * from 表
where 列名 like '%.%'这样查可以查出带有一位小数点的所有记录。select * from 表
where 列名 like '%.%'这样查却查出包括带有一位小数点的所有记录。问题:如何分别在表中找出小数点位数大于1位,2位,3位的记录?
where 列名 like '%.%'这样查可以查出带有一位小数点的所有记录。select * from 表
where 列名 like '%.%'这样查却查出包括带有一位小数点的所有记录。问题:如何分别在表中找出小数点位数大于1位,2位,3位的记录?
select * from tbl where
right(字段名字,len(字段名字)-charindex('.',字段名字))=1
--二位
select * from tbl where
right(字段名字,len(字段名字)-charindex('.',字段名字))=2
--三位
select * from tbl where
right(字段名字,len(字段名字)-charindex('.',字段名字))=3
--一位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=1
--二位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=2
--三位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=3
where charindex('.',replace(列名))>3
应该是
select * from 表
where charindex('.',REVERSE(列名))>3
where 列名 like '%.[0-9][0-9]'
-- 一位
SELECT * FROM 表名 WHERE 列名 LIKE '%._'-- 两位
SELECT * FROM 表名 WHERE 列名 LIKE '%.__'
SELECT * FROM table1 WHERE CHARINDEX('.',REVERSE(列名)) - 1 = 1 --1位
SELECT * FROM table1 WHERE CHARINDEX('.',REVERSE(列名)) - 1 = 2 --2位
SELECT * FROM table1 WHERE CHARINDEX('.',REVERSE(列名)) - 1 = 3 --3位
我也有不对的地方,有些地方没有说清楚。字段中即包括了字母又包括了数字,我的目标是查数字中有小数点的位数以便检查数值的有效性(超出小数点3位就有问题了)。
按2楼的方法进行查询:
--一位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=1——查询结果有一位整数,两位整数带一位小数,还有单个字母。
--二位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=2——查询结果:全部是两位的整数,没有看到小数点。
--三位
select * from tbl where
len(right(字段名字,len(字段名字)-charindex('.',字段名字)))=3——查询结果是整数100;
select * from 表
where charindex('.',REVERSE(列名))>3
——没有查到结果
86万条记录中只找到9条记录,且都是两位整数后带小数点两位——64.15,60.45,66.55 etc..
谢谢,我再试试。我对SQL还不熟悉,所以只知道很少的函数。
真是抱歉。
存在字母的话,比如'vv23263.231bb'SELECT * FROM table1 WHERE CHARINDEX('.',@Str) > 0 AND ISNUMERIC(SUBSTRING(@Str,CHARINDEX('.',@Str) + 1,1)) > 0 --1位
SELECT * FROM table1 WHERE CHARINDEX('.',@Str) > 0 AND ISNUMERIC(SUBSTRING(@Str,CHARINDEX('.',@Str) + 1,2)) > 0 --2位
SELECT * FROM table1 WHERE CHARINDEX('.',@Str) > 0 AND ISNUMERIC(SUBSTRING(@Str,CHARINDEX('.',@Str) + 1,3)) > 0 --3位
select * from 表名
where IsNumeric (列名)=0——可以查出所以该列中有字母的记录;
Access查询
select * from 表名
where IsNumeric (列名)<>true——查询结果同上;