SqlServer数据库中,日期的模糊查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer数据库中,日期的模糊查询相关的知识,希望对你有一定的参考价值。
参考技术A1、打开SQL Server Management Studio管理工具,点击【新建查询】,新建一个SQL书写窗口,用于演示SQL的执行。
2、获取SQLServer中的最小日期(1900-01-01 00:00:00.000)。
3、获取明年的今天,含时间的日期,select DATEADD(year, 1, getdate())。
4、获取明年的今天距离SQLServer最小日期之间差了多少年。
5、计算SQLServer最小日期的前一天日期,不含时间。
6、计算当年最后一天0点日期:SQLServer最小年的前一天,加上当前日期的下一年距离最小日期的年份差即可。
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” 连接
以上是关于SqlServer数据库中,日期的模糊查询的主要内容,如果未能解决你的问题,请参考以下文章
如何优化Sql server 大数据量时使用 like 查询的速度?或有啥别的方法实现模糊查询?