很常见的一个问题要查询数据库中某个时间段的记录?在写sql语句时查询肯定要传入开始结束时间参数,翻阅程序工程代码发现不同人写法不同,仔细想想其实写sql查询语句传入日期时间参数是比传入整形或字符串类型要复杂些,因为设计到日期时间的现实格式,把常见的几种写法总结如下:

  1. 最普通最麻烦的写法,sql语句直接用+连接来写:比如Delphi中直接传入TdateTime类型的参数StartTime、StopTime方法如下:

    SQL.Add(' and (a.begin_time BETWEEN CONVERT(DATETIME, ''' + FormatDateTime('yyyy-mm-dd hh:nn:ss', StartTime) + ''', 102) ');

    SQL.Add(' and CONVERT(DATETIME, ''' + FormatDateTime('yyyy-mm-dd hh:nn:ss', StopTime) + ''', 102))');

    Delphi中直接传入string类型的格式为yyyymmdd类型的日期参数写法如下:

SQL.Add(' and convert(int,(convert(varchar,inquestinfo.begin_time,112)))<= ' + EndDate);

SQL.Add(' and convert(int,(convert(varchar,inquestinfo.end_time,112)))>= ' + BeginDate);

这种写法要熟悉sqlserver中函数convert的用法,还要知道最后一个参数值对应的整数值的格式,很麻烦也浪费时间。

  1. 声明sql变量的写法

    qry.SQL.Add('declare @begin_time datetime');

    qry.SQL.Add('declare @stop_time datetime');

    qry.SQL.Add('declare @inquest_serial int');

    qry.SQL.Add('set @begin_time = CONVERT(DATETIME, ''' + FormatDateTime('yyyy-mm-dd hh:nn:ss', BegTime) + ''', 102)');

    qry.SQL.Add('set @stop_time = CONVERT(DATETIME, ''' + FormatDateTime('yyyy-mm-dd hh:nn:ss', EndTime) + ''', 102)');

    这种方法给变量赋值还是要用到CONVERT函数,绕个玩麻烦。

  2. 最简单最省时的写法,参数化SQL法

    SQL.Add(' and begin_time < :endTime and end_time > :beginTime');

    Parameters.ParamByName('endTime').Value := EndTime;

    Parameters.ParamByName('beginTime').Value := BeginTime;

    此法简单省时,还可以避免SQL注入等安全问题,充分利用了系统封装的便利高效性。不过要注意:动态加入tadoquery.sql的参数化SQL语句在调用参数前先解析下SQL,如下: Parameters.ParseSQL(SQL.Text, True);

代码例下:

with self.qry do begin

try

SQL.Clear();

Parameters.Clear();

Close();

Prepared := False;

SQL.Text := 'SELECT [CurrentNO], [Mask], [CurrentDate] FROM [CurrentID]' +

' WHERE [TabName]= :TabName AND [KeyField]=:KeyField;';

Parameters.ParseSQL(SQL.Text, True); //一定要加,否则运行时报告异常edatabaseerror parameter 'table' not found,就是说参数table在SQL中找不到

Parameters.ParamByName('TabName').Value := Table;

Parameters.ParamByName('KeyField').Value := KeyField;

Prepared := True;

Open();

Delphi查询Sqlserver数据库传入日期类型方法总结相关推荐

  1. SQLSERVER数据库设置varchar类型主键自增方法

    .NET自带生成主键的方法:Guid生成方法,Guid.NewGuid(); SqlServer数据库中: select NEWID() 生成32位长度的字符串主键,在数据库中设置主键自增的方法如下图

  2. Go语言中查询SqlServer数据库

    一.Go语言中查询MsSQL数据库: // main.go package mainimport ("database/sql""fmt""log&q ...

  3. NHibernate中,查询SqlServer数据库多个实体对象

    关于datetime类型使用:  Oracle:  "and tb.EffectiveDate >= to_date(?,'yyyy-mm')" Sql:  "an ...

  4. excel批量转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法

    源数据日期格式:例如: 20160420 20160422 目标日期格式类型: 2016-4-20 2016-4-22 或 2016/04/20 2016/04/22 方法: 一.选中相应数据的单元格 ...

  5. 查询Sqlserver数据库死锁的一个存储过程

    使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉.利用sp_who_loc ...

  6. freetds php mssql 中文乱码,PHP linux下用freetds查询mssql数据库,uniqueidentifier类型字段问题...

    实际用了pdo_dblib扩展 命令行连接测试: 注意字符集,否则会出现乱码 如果没有中文语言呢 可以通过网上下载安装中文语言包yum groupinstall chinese-support 修改系 ...

  7. Node.js怎么处理数据库中日期类型

    问题描述:在数据库里存储时间的时候明明显示的是类如2016-12-22的形式,读取出来后却变成了大概是这样的:Fri May 17 2016 14:12:33 GMT+0800 (中国标准时间) 处理 ...

  8. 批量替换sqlserver数据库TEXT字段类型的数据

    在申请百度推广账户的时候,百度需要审查旅游网站不能含有机票两个字,所以需要在旅游线路中批量替换掉机票2个字. 替换示例如下:   --创建数据测试环境 create table #tb(L_TEXT ...

  9. Sqlserver中格式化日期作为查询条件的语句写法

    场景 查询sqlserver数据库中某一天的数据的数量. 要以一个日期字段作为查询条件. 这时就要使用格式化日期的函数进行日期的比较. 实现 成功的示例代码: SELECT COUNT( 1 ) FR ...

最新文章

  1. 伤疤好了有黑印怎么办_搞笑gif动态图片:“发现相亲对象的闺蜜更有实力,我后悔了”哈哈哈好一个见色起意...
  2. docker logstash log docker logs to elasticsearch
  3. (47)逆向分析 KiSystemService 函数填充 _KTRAP_FRAME 部分
  4. BEIT:基于图像重建进行预训练!微软提出BEIT,Top-1准确率达86.3%!代码已开源!...
  5. gtone eclipse plugin install
  6. 3.2 指数型生成函数
  7. 【24】淘宝sdk——入门实战之左右悬浮模块
  8. spring boot websocket 客户端_Spring Boot 开发集成 WebSocket,实现私有即时通信系统
  9. c事件和委托的区别_web前端教程分享JavaScript学习笔记之Event事件二
  10. LeetCode:三个数的最大乘积【628】
  11. cache性能优化总结
  12. 【MTSP】基于matlab灰狼算法求解多旅行商问题(同始终点)【含Matlab源码 1564期】
  13. 学生管理系统功能设计c语言,C语言--学生信息管理系统设计.doc
  14. 电商峰值系统架构设计--转载
  15. 苦熬31年终于登陆科创板!WPS如何一步步熬到了今天?
  16. 临时记录一次ic卡破解(1)
  17. 六年级下学期计算机课教学进度,六年级下册信息技术教学计划
  18. 3ds max中的对象绕局部坐标系旋转的动画
  19. 触控面板 开发_长信科技研发内核不断升级 成触控显示一体化领军企业
  20. 计算机设计图片教程,电脑如何抠图?教你一招快速搞定

热门文章

  1. jQuery remove()与jQuery empty()的区别
  2. Java 时间和字符换的处理
  3. How to install OpenERP 6 on Ubuntu 10.04 LTS Server--1
  4. 局域一台打印机突然链接失败,其他能正常连接打印服务器。
  5. 利用winrar自动备份重要资料
  6. 【转载】Elasticsearch客户端API使用Demo
  7. STL(七)——队列queue优先队列priority_queue
  8. 20210819_Test
  9. linux下日志rorate,[转载]linux下日志分割logrotate 设置和理解
  10. 记一次简单的vue组件单元测试