`

SQL语句日期格式的加减运算

    博客分类:
  • sql
阅读更多
实现SQL语句日期格式的加减运算

    今天在工作中遇到了一个问题,需要按时间查询,可是查询出来的结果显示的不正确。举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上注册的会员,选择好日期后,点击“查询”按钮,发现2007-10-31注册的会员的信息根本没有显示出来,试验了几次结果都是一样。调试程序发现,原来是在SQL语句这里出现了问题。powered by 25175.net

  SQL语句如下:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。初看上去这条SQL语句没有错误,可是对照数据库中相应字段保存的值以后,发现保存的值并不是简单的日期形式,而是日期+时间的形式,即:yyyy-MM-dd HH:mm:ss,这时SQL语句在判断regtime和'2007-10-31'的大小时,会认为'2007-10-31'写的不完整,所以不会认为这两个值是相等的。这可怎么办呢?

  1.日期相加

  DateAdd 函数
  返回已添加指定时间间隔的日期。
  DateAdd(interval, number, date)

  DateAdd 函数的语法有以下参数
  (1)interval 必选项。字符串表达式,表示要添加的时间间隔。有关数值,请参阅“设置”部分。
  (2)number 必选项。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。
  (3)date   必选项。Variant 或要添加 interval 的表示日期的文字。

  说明
  可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。

  DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月:

  NewDate = DateAdd("m", 1, "31-Jan-95")
  在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。

  如果计算的日期是在公元 100 年之前,则会产生错误。
  如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。

    SQL语句:
    select DateAdd(mi,15,getdate()),* from sys_user
    说明: 当前日期加15分钟


  2.日期相减
  DateDiff 函数
  返回两个日期之间的时间间隔。
  DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

  DateDiff 函数的语法有以下参数:
  (1)interval 必选项。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。
  (2)date1, date2 必选项。日期表达式。用于计算的两个日期。
  (3)Firstdayofweek 可选项。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。
  (4)Firstweekofyear 可选项。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。

  说明
  DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。

  要计算 date1 和 date2 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 date1 是星期一,则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日,DateDiff 将计算 date2,但即使 date1 是星期日,也不会计算 date1。

  如果 date1 晚于 date2,则 DateDiff 函数返回负数。

  firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。

  如果 date1 或 date2 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (" ") 中并且省略年份,则在代码中每次计算 date1 或 date2 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。

  在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份。

    例:
    select * from sys_user where datediff(hh,create_date,getdate())>1
    说明:查询用户表中,当前日期减去新增时间(create_date)大于1小时的数据


原文地址:http://www.25175.com/200609/25175/25175_html/2008-09/2762.html
分享到:
评论

相关推荐

    SQL实现相邻两行数据的加减乘除操作

    SQL实现表里数据按一定顺序排序后,按某几个字段分组后相邻两行数据实现加减乘除运算。 思路: 1:先把表数据分组排序后打上序号标签 2:根据需求把标签字段加/减一 上代码: select distinct a.phone,from_unix...

    ASP 日期的加减运算实现代码

    举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上...初看上去这条SQL语句没有错误,可是对照数据库中相应字段保存的值以后,发现保存的值并不是简单的日期形式,而是日期+时间的形式,即:yyyy-MM-dd HH:mm:s

    T-SQL高级查询

    操作两组查询结果,进行交集、并集、减集运算 1、 union和union all进行并集运算 --union 并集、不重复 select id, name from student where name like 'ja%' union select id, name from student where id = 4; ...

    2009达内SQL学习笔记

    2、对数据类型的列可进行运算(如加减乘除)。 3、对列起别名:有直接起别名,加AS起别名,用双引号起别名等三种方法 (单引号,引起字符串;双引号,引起别名。起别名有符号,或者区分大小写时,必须用双引号) 多...

    SQL 基础--SELECT 查询

    --算术加减运算 SQL&gt; SELECT EMPNO,ENAME,SAL + 300 FROM SCOTT.EMP; EMPNO ENAME SAL+300 ---------- ---------- ---------- 7369 SMITH 1100 7499 ALLEN 1900 7521 WARD 1550 --优先级 SQL&gt; SELECT EMPNO,...

    浅析SQL数据操作语句

    -:减运算,求两个数或表达式相减的差 *,乘运算,求两个数或表达式相乘的积 /:除运算,求两个数或表达式相除的商 %:取模运算,求两个数或表达式相除的余数 2.赋值运算 =:把一个数或表达式赋值给另一个标量. 3.比较运算符 ...

    ORACLE数据库智能化管理系统2012

    批量数据比较功能,增加了数字型字段4种(左右两边数据加减乘除)处理方式和4种行数据处理(左右两边互移或互复制行),可从数据源复合查询结果数据与目标数据进行运算,达到想要的结果等。 数据窗口右键菜单功能整合多种...

    锐达人力资源管理系统(B/S架构)

    最强工资模块,可任意自定义工资项目、支持多帐套、最强工资计算公式设置功能:除支持一般的加减乘除四则运算外,还可以支持多条件判断,甚至可以直接使用SQL语句编写公式,这样就保证公式计算没用了死角,可以实现...

    轻松学C#(图解版)

    出版日期:2013年6月 开本:16开 页码:408页 版次:1-1 定价:¥55.00 所属分类:计算机 &gt; 软件与程序设计 &gt; C# ================================================================ 内容简介 本书由浅入深,全面、...

    [php]mysql数据库操作——DB类

    -- 作 用:数据库执行语句,可执行查询添加修改删除等任何sql语句 -- 参 数:$sql sql语句(必填) -- 返回值:布尔 -- 实 例:无 *******************************************************************/ ...

    易语言540个易模块

    RC4-林子深 RUN加减模块1.0 日期格式规范 日期设置模块 日期时间增强 软件注册模块 软件注册算号器模块 S Sqlite表管理 SQL基本语句 SQL数据库操作模块 SQL数据库最新操作模块 色彩转换_模块 杀进程模块 ...

    整理后java开发全套达内学习笔记(含练习)

    exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) finally (关键字) fragments 段落; 代码块 ['frægmәnt] FrameWork [java] 结构,...

    790个易模块打包下载-2

    RUN加减模块1.0+名.ec Sqlite表管理.ec SQL基本语句.ec SQL数据库操作模块.ec SQL数据库最新操作模块.ec TCP服务器.ec TWnet.CN.EC user32模块.EC user模块.EC USUAL.EC windowsXP界面模拟模块1.0.ec ...

    790个易模块-3

    RUN加减模块1.0+名.ec Sqlite表管理.ec SQL基本语句.ec SQL数据库操作模块.ec SQL数据库最新操作模块.ec TCP服务器.ec TWnet.CN.EC user32模块.EC user模块.EC USUAL.EC windowsXP界面模拟模块1.0.ec ...

    790个易模块打包

    RUN加减模块1.0+名.ec Sqlite表管理.ec SQL基本语句.ec SQL数据库操作模块.ec SQL数据库最新操作模块.ec TCP服务器.ec TWnet.CN.EC user32模块.EC user模块.EC USUAL.EC windowsXP界面模拟模块1.0.ec ...

    易语言模块大全(374个)

    RUN加减模块1.0+名.ec 取声调拼音模块1.0.ec 堕之星辰1.2.ec 系统资源检测模块.ec 滑块条扩容模块.ec 窗口整容师1.1.ec 窗口整容师1.0.EC 填充树型框.ec 文本操作1.0.EC XP完美模拟专家.EC 溪流关于窗口1.0.ec 菜单...

    ASP.NET编程之道.part1.rar

    谬误01 所有的异常都要使用try…catch语句捕获 谬误02 Web控件的Enabled功能等价于HTML控件的 disabled属性 谬误03 将Session设置为空就是删除该会话状态 谬误04 RegisterStartupScript方法不能向页面输出文本 谬误...

Global site tag (gtag.js) - Google Analytics