SELECT * FROM A WHERE SCORE='未考' or convert(int,SCORE) <60

解决方案 »

  1.   

    SELECT * FROM A WHERE SCORE=未考' AND cast(分数 as int )<60
      

  2.   

    举个例子好了
    表A的三个字段都为varchar类型的
    name subject score
    张三  语文    80
    张三  数学    58
    张三  物理    20
    李四  语文   100
    李四  物理   未考
    李四  英语    76
    李四  化学   作弊  要求查出所有小于60分和有作弊,未考的学生的科目
      

  3.   

    score那个字段有可能是 70,70.00,70.,70.0或未考,作弊,免考,请假......等等
      

  4.   

    create table tablename(name varchar(10),subject varchar(10),score varchar(10))insert into tablename values('张三','语文','80')
    insert into tablename values('张三','数学','58')
    insert into tablename values('张三','物理','20')
    insert into tablename values('李四','语文','100')
    insert into tablename values('李四','物理','未考')
    insert into tablename values('李四','英语','76')
    insert into tablename values('李四','化学','作弊')select * from tablename
    select * 
    into #tmp
    from tablename where score<>'未考' and score<>'作弊'select * from #tmp where convert(int,SCORE) < 60
    union
    select * from tablename where score='未考' or score='作弊'
      

  5.   

    原则上先把 未考,作弊,免考,请假等剔出掉,然后convert(int,SCORE) < 60。最后union一下即可
      

  6.   

    select * from tablename
    where (case when isnumeric(score)=1 then score else 80 end)<60
    or (case when isnumeric(score)=0 then score end)in('未考','作弊')
      

  7.   

    create table tablename(name varchar(10),subject varchar(10),score varchar(10))insert into tablename values('张三','语文','80')
    insert into tablename values('张三','数学','58')
    insert into tablename values('张三','物理','20')
    insert into tablename values('李四','语文','100')
    insert into tablename values('李四','物理','未考')
    insert into tablename values('李四','英语','76')
    insert into tablename values('李四','化学','作弊')select * from tablename where SCORE='未考' or (case when ISNUMERIC(score)=1 then cast(score as int) end)<60
      

  8.   

    可以简化为:
    select * from #T 
    where (case when isnumeric(score)=1 then score end)<60
    or score in('未考','作弊')
      

  9.   

    我是这样做的,可行吗?
    SELECT * FROM A 
    WHERE
    (ASCII(LTRIM(RTRIM(Score))) >= 48) AND (ASCII(LTRIM(RTRIM(Score))) < 54) 
    OR
    (LTRIM(RTRIM(Score)) IN ('作弊', '末考'))
      

  10.   

    SELECT * FROM A 
    WHERE (LTRIM(RTRIM(Score))<>'100' AND
    (ASCII(LTRIM(RTRIM(Score))) >= 48) AND (ASCII(LTRIM(RTRIM(Score))) < 54) 
    OR
    (LTRIM(RTRIM(Score)) IN ('作弊', '末考'))
      

  11.   

    create table tablename(name varchar(10),subject varchar(10),score varchar(10))
    go
    insert into tablename values('张三','语文','80')
    insert into tablename values('张三','数学','58')
    insert into tablename values('张三','物理','20')
    insert into tablename values('李四','语文','100')
    insert into tablename values('李四','物理','未考')
    insert into tablename values('李四','英语','76')
    insert into tablename values('李四','化学','作弊')select * from tablename
    SELECT * FROM tablename 
    WHERE SCORE='未考' or convert(int,case  when ascii(SCORE)<100 then score else '100' end) <60
    /*name       subject    score      
    ---------- ---------- ---------- 
    张三         数学         58
    张三         物理         20
    李四         物理         未考(所影响的行数为 3 行)
    */
      

  12.   


    SELECT * FROM tablename 
    WHERE SCORE='未考' or SCORE='作弊' or convert(int,case  when ascii(SCORE)<100 then score else '100' end) <60
    /*
    name       subject    score      
    ---------- ---------- ---------- 
    张三         数学         58
    张三         物理         20
    李四         物理         未考
    李四         化学         作弊
    */
      

  13.   

    能解释这句吗?
     convert(int,case  when ascii(SCORE)<100 then score else '100' end) <60
      

  14.   

    原则上先把 未考,作弊,免考,请假等剔出掉,然后convert(int,SCORE) < 60。最后union一下即可
      

  15.   

    select * from A where score='未考'or score<=60
      

  16.   

    create table tablename(name varchar(10),subject varchar(10),score varchar(10))insert into tablename values('张三','语文','80')
    insert into tablename values('张三','数学','58')
    insert into tablename values('张三','物理','20')
    insert into tablename values('李四','语文','100')
    insert into tablename values('李四','物理','未考')
    insert into tablename values('李四','英语','76')
    insert into tablename values('李四','化学','作弊')
    select * from tablename where left('000',3-len(score))+ score<'060' or score in('作弊','未考')
    drop table tablename
    /*
    name       subject    score      
    ---------- ---------- ---------- 
    张三         数学         58
    张三         物理         20
    李四         物理         未考
    李四         化学         作弊
    */
      

  17.   

    如果分数有小数和还有其他的中文,这个就不成立了.只能针对分数为整数和中文固定的,应为该查询为文本计算,要计算ASCII比较!
      

  18.   

    NAME       OBJECT     SCORE
    ---------- ---------- ----------
    111        gs         未考
    111        ghf        70
    111        gf         41.
    111        hr         作弊
    222        jhh        48.00
    222        gr         80
    222        sd         未考
    222        uh         作弊
    444        fg         生孩子
    333        dsa        结婚
    333        gt         请假
    333        kj         免考
    444        jy         不想考
    555        JY         59
    555        FD         60
    555        DV         100
    我建了一张模拟表
    以下是SOL语句
    NAME       OBJECT     SCORE
    ---------- ---------- ----------
    111        gf         41.
    111        gs         未考
    111        hr         作弊
    222        jhh        48.00
    222        sd         未考
    222        uh         作弊
    555        JY         597 rows selected
    这是运行结果
      

  19.   

    SELECT * FROM 
    (select *  from cjb where SCORE <>'结婚'  and  score<>'免考'  and  score<>'生孩子'  and  score<>'不想考' and  score<>'请假' and  score<>'作弊'and  score<>'未考') CJB01
    WHERE SCORE <60
    UNION  
    select * from cjb where score = '未考' or  score = '作弊';
      

  20.   

    我猜想如果你没建主键或非空约束的话,里面可能会有值为空的情况,比如score里的值为空,最好先把表用select NAME,OBJECT  ,NVL (SCORE,'未填') FROM CJB;把它填上。以免数据的遗漏。
      

  21.   

    select * from A where score= '未考' or  score= '作弊' or convert(int,score) < 60
      

  22.   

    我们公司那个系统就是[tyro_oracle(哦瑞叩(初学者)) ]建的那张表那种情况,不知道之前在那买的,居然那样设计表的,所以现在只能把已有的中文筛选出来在做判断.谢谢各位了