• Sql多条件查询


    以前我们做多条件查询,一种是排列结合,另一种是动态拼接SQL
    如:我们要有两个条件,一个日期@addDate,一个是@name
    第一种写法是
    if (@addDate is not null) and (@name <> '')
    select * from table where addDate = @addDate and name = @name
    else if (@addDate is not null) and (@name ='')
    select * from table where addDate = @addDate
    else if(@addDate is  null) and (@name <> '')
    select * from table where and name = @name
    else if(@addDate is  null) and (@name = '')
    select * from table

    第二种就是动态组成SQL,通过exec来执行,我就不写,
    昨天我想到一种办法
    select * from table where (addDate = @addDate or @addDate is null) and (name = @name or @name = '')
    结果一调试,成功,
    一点想法,有更好方法的,请指教!~

    # re: sql 多条件查询的一种简单的方法 2004-07-16 15:18 fengzhimei
    应该还可以这样写:
    SELECT * FROM table WHERE ISNULL(addDate, @addDate) = @addDate and ISNULL(name, "") = @name
    或者:
    SELECT * FROM table WHERE addDate IN (@addDate,Null) and name IN (@name, "")
      


    # re: sql 多条件查询的一种简单的方法 2004-07-16 15:32 edobnet
    你没有理解我的意思!

      


    # re: sql 多条件查询的一种简单的方法 2004-07-16 15:34 edobnet
    我的意思是,@addDate  = null 不参加搜索,
    @name = ''不参加搜索!
      


    # re: sql 多条件查询的一种简单的方法 2004-07-16 16:18 Goodspeed
    我一般是这样来做的

    SELECT * FROM table where
    addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END,
    name = CASE @name WHEN '' THEN name ELSE @name END
      


    # re: sql 多条件查询的一种简单的方法 2004-07-16 23:21 progame
    我的方法:
    Dim qm As QueryManager
    Dim cv1 As ConcreteView
    Dim cv2 As ConcreteView
    Dim sql As String

    Set qm = m_con.createQueryManager
    Set cv1 = m_con.createConcreteView
    Set cv2 = m_con.createConcreteView

    cv1.sql = "SELECT code FROM TDalop WHERE #namefilter# "
    cv1.setFilter "namefilter", "name = :name"
    cv1.setParam "name", ".!)(@#&09452342'#''"""

    cv2.sql = "SELECT * FROM TDalop WHERE #codefilter# and #uidfilter#"
    cv2.setFilter "codefilter", "code in {codelist}"
    cv2.addView cv1, "codelist"
    cv2.addView cv1, "codelist"
    cv2.setFilter "uidfilter", "uid = :uid"
    cv2.setParam "uid", "0"

    oTestResult.AddTrace cv2.getOutputSql

    qm.Execute cv2
    # re: sql 多条件查询的一种简单的方法 2004-07-16 23:21 progame
    凡是查询的参数为空的,直接使用 1=1 代替,这样就避免了数据库中该字段为null的情况





  • 相关阅读:
    CB文件读入后输出中文乱码问题
    2019-ICPC-沈阳站打铁感想
    计蒜客习题:画图游戏(Havel-Hakimi定理)
    计蒜客练习题:接龙(带权并查集)
    搜索----Dungeon Master
    最短路 poj1502 MPI Maelstrom
    poj 3259 Wormholes
    Silver Cow Party
    Til the Cows Come Home
    Cow Contest
  • 原文地址:https://www.cnblogs.com/bearhb/p/150296.html
Copyright © 2020-2023  润新知