例如n表里面字段a和b里面的数据分别是10和*10-10
那如何查询出小于100的记录出来以下是错误的写法:
select * from n where a,b<100

解决方案 »

  1.   

    a和b都小于100?
    select * from n where a<100 and b <100
      

  2.   

    不是啊,你没看到自己里面是哪些数据吗?
    a=10
    b=*10-10要a和b要连接起来再计算小于100
      

  3.   


    SELECT * FROM TABLE WHERE  cast( substring(b,1,2) as int )* cast( substring(b,5,2) as int )<100
      

  4.   


    SELECT * FROM TABLE WHERE  cast( substring(b,2,2) as int )* cast( substring(b,5,2) as int )<100
      

  5.   

    SELECT * FROM TABLE WHERE  a*cast( substring(b,2,2) as int )- cast( substring(b,5,2) as int )<100
      

  6.   


    SELECT * FROM n WHERE  a*cast( substring(b,2,2) as int )- cast( substring(b,5,2) as int ) <100
    经过验证可行
      

  7.   

    还是不对的哦
    b的公式不是固定的,有可能b="+20*2-3"之类的公式
    那么就会是
    a="5"
    b="+20*2-3"sql语句就是
    select * from n where 这里就是用a和b连接出来计算出的结果(5+20*2-3=42)<100
      

  8.   

    测试SQL,通过declare @t1 as table
    (a nvarchar(20),b nvarchar(20))insert into @t1 values('10','*10-11')select substring(b,2,CHARINDEX('-', b)-CHARINDEX('*', b)-1),
    substring(b,CHARINDEX('-', b)+1,len(b)-CHARINDEX('-', b))
     from @t1select *,
    (convert(int,a)*convert(int,substring(b,2,CHARINDEX('-', b)-CHARINDEX('*', b)-1))-convert(int,substring(b,CHARINDEX('-', b)+1,len(b)-CHARINDEX('-', b)))) '结果'
    from @t1 
    where (convert(int,a)*convert(int,substring(b,2,CHARINDEX('-', b)-CHARINDEX('*', b)-1))-convert(int,substring(b,CHARINDEX('-', b)+1,len(b)-CHARINDEX('-', b))))<100
      

  9.   

    SELECT * FROM TABLE WHERE  a*cast( substring(b,1,charindex('-',b)-1) as int )- cast( substring(b,charindex('-',b),len(b)-charindex('-',b)) as int ) <100 
      

  10.   

    先把一条记录里的 a 和 b 的内容取出来,连接成一个字符串
    算出结果,然后判断是否小于100
    然后再判断要不要去执行sql语句
    组建sql语句都免了
      

  11.   

    用sql clr。 写一个c#表达式计算方法,嵌入到sql中去就可以了。
      

  12.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;namespace WindowsApplication56
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            String a = "10";
                String b = "*10-10";            using (SqlConnection Connection = new SqlConnection(".."))
                {
                    String C = a + b;                Connection.Open();
                    SqlCommand Command = new SqlCommand("SELECT * FROM N WHERE "+C+"<100");
                    Command.ExecuteNonQuery();  
                }
            }
        }
    }
      

  13.   

    用存储过程实现的,公式随便变化都无所谓 测试通过。。create procedure sp_CalcExpression
    @Expression varchar(8000)
    ,@result int out
    as
    declare @sql nvarchar(4000)
    set @sql = N'set @result = ' + @Expression
    exec SP_EXECUTESQL @sql ,N'@result int out', @result out
    select @resultdeclare @x int
    exec sp_CalcExpression '10*10-11', @x out
    select @x
      

  14.   

    select a+''+b from tableName 就可以得到表达式了。。
      

  15.   

    页面后台处理:            string a = "10*10-11";
                System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(@"[=+-/^\*\!]");
                System.Text.RegularExpressions.MatchCollection matches = re.Matches(a);//取出运算符集合
                  foreach (System.Text.RegularExpressions.Match ma in matches)
                {
                    string v=ma.Value;//循环取出运算符
                }
                string[] expr = re.Split(a);//取出由运算符分隔的数字集合{10,10,11}剩下的就是循环组合了。。
      

  16.   

    我是用ORACLE的,要是用ORACLE就很好实现,不知道SQL是否也有这样的处理方法,请参考:1.写一个FUNCTION(方法名:lsrund),ls_num number(18,2);ls_exsql varchar2(500); ls_b varchar2(100) ls_b varchar2(100)  select a,b into ls_a,ls_b from n where ...;ls_exsql :='select '||ls_a||ls_b||' from dual';  execute immediate ls_exsql into ls_num ; 然后你写视图直接取出:SELECT A,B,lsrund(N表ID) as 计算结果 from n where lsrund(N表ID)<100
      

  17.   

    只给一个思路:
    1、先定义一个自定义函数UDF(a,b),返回值为字符串连接后形成的公式的值(拼接SQL语句,使用Exec执行);
    2、使用SQL语句:
    Select * from n where UDF(a,b) < 100