sqlserver 分页模糊查询

                                  积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿

问题: 在sqlserver 进行模糊查询,出现问题

最初使用“concat”,进行拼串操作,如下所示:
<select id = "queryCount" resultType="int" >
    select count(*)
    from t_user
    <where>
        <if test = "queryText!= null"> loginacct like concat("%", #{queryText}, "%) </if>
    </where>
</select>

运行结果concat” 是不是可以识别的函数,不是内置函数

查询结果: “concat”方法进行拼串,只适用于mysql 和 oracle, 不适用于sqlserver,这个函数是用来连接字符串,                            sqlserver中没有,可以使用 + 连接符号搞定

解决方案:使用传统的拼串操作,“like”操作尝试:

尝试一: 使用占位符(#{})<select id = "queryCount" resultType="int" >
    select count(*)
    from t_user
    <where>
        <if test = "queryText!= null"> loginacct like ‘%#{queryText}%‘ </if>
    </where>
</select>

运行结果:Preparing: select count(*) from t_user WHERE loginacct like ‘%?%‘ 

com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。

查询结果:在使用占位符进行模糊查询时不能把问号放在引号里面,问号的位置必须跟字段名同级;(不理解)

解决方案:like ‘%‘ + #{quertText} + ‘%’(成功运行)

<select id = "queryCount" resultType="int" >    select count(*)    from t_user    <where>        <if test = "queryText!= null"> loginacct like ‘%‘ + #{queryText}+ ‘%‘ </if>    </where></select>
尝试二: 使用EL表达式(成功运行)
 <select id = "queryCount" resultType="int" >
        select count(*)
        from t_user
        <where>
            <if test = "queryText!= null"> loginacct like ‘%${queryText}%‘ </if>
        </where>
   </select>存在问题:使用 ${}无法防止sql注入   

  结论:sqlserver 模糊查询中, 优先使用 like ‘%‘ + #{quertText} + ‘%’进行操作

sqlserver 分页模糊查询例码:(供自己忘记后查看)

<select id = "queryList" resultType="T_user">
    select top ${pagesize}*
    from t_user
    <where>
        <if test = "queryText!=null">loginacct like ‘%‘ + #{queryText}+ ‘%‘
            and id not in
            (select top ${startIndex} id from  t_user order by id)
            order by id
        </if>
    </where>
    <where>
        <if test = "queryText==null">
            id not in
            (select top ${startIndex} id from  t_user order by id)
            order by id
        </if>
    </where>
</select>

注意事项: 单个或者是多个条件查询,都是只有一个“where” 条件之间使用 “and” 连接

原文地址:https://www.cnblogs.com/helloqiufei/p/11183302.html

时间: 2024-10-13 08:43:46

sqlserver 分页模糊查询的相关文章

mybatis oracle 分页+模糊查询

实现分页的方式有很多,但常用的是通过SQL来显示分页. 下面就来介绍mybatis 来实现Oracle分页的写法:(ps:不同数据库的写法有区别) 一.分页数据: 1 <select id="findPageByCode" parameterType="java.util.Map" resultMap="pageVO"> 2 select * from 3 ( 4 select A.* ,ROWNUM rn 5 from (selec

mybatis 全查 分页 模糊查询一体

<!-- 全查 分页 模糊--> <select id="selectAll" resultMap="BaseResultMap" > SELECT NOTICE_ID,NOTICE_TITLE,TYPE,DATETIME FROM pt_notice <where> <if test=" type != null and type != '' "> <bind name="fTyp

sqlserver like模糊查询跟&lt;&gt;查询比较

SELECT  b.deptname ,                    a.badgenumber ,                    a.userid ,                    a.ssn ,                    a.name            FROM    dbo.USERINFO a                    INNER JOIN dbo.DEPARTMENTS b ON a.defaultdeptid = b.deptid

[转]SQL 模糊查询

在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需

SQL like 模糊查询

SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚

SQL的模糊查询

SQL的模糊查询 在进行数据库查询时,有完整查询和模糊查询之分.一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来.另外

SQL的模糊查询(转载)

本文由转载而来: 原文地址链接:http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user

sql模糊查询

SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出

关于sql模糊查询大全(转)

在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需