有一张表 某字段 是nvarchar的,里面存了浮点型数字,有一位小数也有两位小数。请问如何分别查询出带有一位小数点的所有记录和带有两位小数点的所有记录?select * from 表
where 列名 like '%.%'这样查可以查出带有一位小数点的所有记录。select * from 表
where 列名 like '%.%'这样查却查出包括带有一位小数点的所有记录。问题:如何分别在表中找出小数点位数大于1位,2位,3位的记录?

解决方案 »

  1.   

    --一位
    select * from tbl where 
    right(字段名字,len(字段名字)-charindex('.',字段名字))=1
    --二位
    select * from tbl where 
    right(字段名字,len(字段名字)-charindex('.',字段名字))=2
    --三位
    select * from tbl where 
    right(字段名字,len(字段名字)-charindex('.',字段名字))=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
      

  3.   

    select * from 表
    where charindex('.',replace(列名))>3
      

  4.   

    记错函数了
    应该是
    select * from 表
    where charindex('.',REVERSE(列名))>3
      

  5.   

    select * from 表
    where 列名 like '%.[0-9][0-9]'
      

  6.   


    -- 一位
    SELECT * FROM 表名 WHERE 列名 LIKE '%._'-- 两位
    SELECT * FROM 表名 WHERE 列名 LIKE '%.__'
      

  7.   


    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位
      

  8.   

    先谢谢各位的帮助。
    我也有不对的地方,有些地方没有说清楚。字段中即包括了字母又包括了数字,我的目标是查数字中有小数点的位数以便检查数值的有效性(超出小数点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;
      

  9.   

    3楼的方法:
    select * from 表
    where charindex('.',REVERSE(列名))>3
    ——没有查到结果
      

  10.   

    5楼的方法:
    86万条记录中只找到9条记录,且都是两位整数后带小数点两位——64.15,60.45,66.55  etc..
      

  11.   

    你不会改where后面的条件啊?是不是数字先用isnumerical函数判断,也就是加个条件and isnumerical(一段名称)=0
      

  12.   

    回11楼,我知道了。
    谢谢,我再试试。我对SQL还不熟悉,所以只知道很少的函数。
    真是抱歉。
      

  13.   


    存在字母的话,比如'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位
      

  14.   

    MS-SQL查询
    select * from 表名
    where IsNumeric (列名)=0——可以查出所以该列中有字母的记录;
    Access查询
    select * from 表名
    where IsNumeric (列名)<>true——查询结果同上;