`

关于sql时间处理的一些小示例

阅读更多

DAY函数:返回一个整数,表示指定日期天的DatePart(时间)部分
此函数等价于 DATEPART(dd, date)。
返回类型为int

 

--示例:
SELECT DAY('03/12/1998') AS 'Day Number';
GO

--下面是结果集: 
Day Number 
------------ 
12        

 

在下面的示例中,日期被指定为数字。Microsoft SQL Server 2005 Database Engine 将 0 解释为 1900 年 1 月 1 日。

 

SELECT MONTH(0), DAY(0), YEAR(0)

--下面是结果集: 
----- ------ ------
1     1      1900

 

 

datepart函数:返回表示指定日期的指定日期部分的整数.
DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date) 和 DATEPART(yy, date) 的同义词。
DATEPART(dd, date)、DATEPART(mm, date) 和 DATEPART(yy, date) (分别返回天,月,年)

语法:
DATEPART ( datepart , date )

 

select datepart(mm,'2008-1-2')

下面是结果集: 
----- ------ ------
1

 

DateAdd函数:返回给指定日期加上一个时间间隔后的新 datetime 值.
语发:DATEADD (datepart , number, date )
datepart代表格式如:dd,yy,mm等.

 

select Dateadd(yy,1,'2008-01-01')

--下面是结果集: 
----- ------ ------
2009-01-01 00:00:00.000

 

 

示例:
--得出某月某日所在月份中的最大天数

select day(dateadd(dd,-day('2008-02-13'),dateadd(mm,1,'2008-02-13')))

--解释:
select dateadd(mm,1,'2008-02-13') 

--返回的是:2008-03-13 00:00:00.000

select -day('2008-02-13')
--返回的是:-13

--所以得出某月某日所在月份中的最大天数

--返回:29

 

 

  示例:
修改时间字段的小时部分

--把所有时间2006-11-1的数据 23点 修改为 21点
create table Testminute
(
	id int primary key identity,
	date datetime
)
go

select * from testminute
go

insert into testminute values ('2009-1-1 23:44');
insert into testminute values ('2009-1-1 22:44');
insert into testminute values ('2009-1-1 23:44');
insert into testminute values ('2009-1-1 21:44');
insert into testminute values ('2009-1-1 23:44');


select convert(varchar(30),date,8) from testminute

--返回:
21:44:00
22:44:00
21:44:00
21:44:00
21:44:00


select substring(convert(varchar(30),date,8),3,7) from testminute
--返回:
:44:00
:44:00
:44:00
:44:00
:44:00

根据以上思路就可以实现把所有时间2006-11-1的数据 23点 修改为 21点
update testminute set date='2009-1-1 21'+
substring(convert(varchar(30),date,8),3,7) where datepart(hour,date)=23

 

 

DATEDIFF 函数计算指定的两个日期中第二个日期与第一个日期的时间差的日期部分。换句话说,它得出两个日期之间的间隔。结果是等于 date2 - date1 的日期部分的带符号整数值。

 

示例:
select datediff(day,date,'2009-02-01') from testminute

--返回:
31
31
31
31
31

 

 

--显示文章、提交人和最后回复时间 示例:
IF OBJECT_ID('tablename') IS NOT NULL
  DROP TABLE tablename
GO

CREATE TABLE tablename(title varchar(100),username varchar(10),adddate datetime)
go

insert into tablename
select 'a','j','2009-7-11 18:47' union all
select 'a','k','2009-7-11 18:30' union all
select 'a','e','2009-7-11 18:39' union all
select 'c','f','2009-7-11 18:37' union all
select 'c','g','2009-7-11 18:39' 
go

select title,username,adddate from tablename a where adddate in(
select max(adddate) adddate from tablename where title=a.title) 

/*
title                                                                                                username   adddate
---------------------------------------------------------------------------------------------------- ---------- -----------------------
c                                                                                                    g          2009-07-11 18:39:00.000
a                                                                                                    j          2009-07-11 18:47:00.000

(2 行受影响)
*/

 

 

日程安排提前5分钟提醒 示例:
--第一个例子
IF OBJECT_ID('TabSchedule ') IS NOT NULL
  DROP TABLE TabSchedule 
GO
CREATE TABLE TabSchedule (username varchar(10),开始时间 datetime)
go
insert into TabSchedule
select 'a','2009-7-11 18:45'  union all
select 'b','2009-7-11 18:46'  union all
select 'c','2009-7-11 18:47'  union all
select 'd','2009-7-11 18:49'  union all
select 'e','2009-7-11 18:31'  
go

Select * from TabSchedule where datediff(minute,getdate(),开始时间) <5 
/*
username   开始时间
---------- -----------------------
a          2009-07-11 18:45:00.000
e          2009-07-11 18:31:00.000

(2 行受影响)*/

 

这里的意思是,当前时间快接近日程开始时间,低于5分钟的差时,获取该日程信息。
  你的假设:当前时间已经超过了开始时间,这种情况在开发的时候是不会出现的。
  因为在这之前,肯定都已经执行了这个语句,获取了日程安排,做了提醒。难道程序不做记录吗,永远这样执行下去吗,肯定不是。
  一旦提醒过了,你的程序肯定要对该日程的状态做更新,说明该日程已经提醒过了,或者删除这个过期的日程安排了。
  你明白我说的意思吗?

分享到:
评论

相关推荐

    经典SQL脚本大全

    │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例.sql │ │ 8.2.7 实现删除指定结点及所有子节点的处理触发器.sql ...

    Sqlserver2000经典脚本

    │ 5.2.3 生成纯字母随机编号的示例(大小写混合).sql │ │ 5.2.3 生成纯数字随机编号的示例.sql │ │ 5.3.2 融合了补号处理的编号生成处理示例.sql │ │ 5.3.3 使用UPDATE进行编号重排的处理示例....

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。...

    sqlserver经典脚本大全.zip

    1.9.1 设置内存选项 1.9.2(2) 使用文件及文件组 1.9.2(3) 调整tempdb数据库的文件属性 2.1 日期概念理解中的一些测试 2.2.4 CONVERT在日期转换中的使用示例 2.3.3 SET DATEFORMAT对日期处理的...3.5.5 字符串处理示例--

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    时间处理  Datetime相关的查询问题  1.2 与字符相关的问题  模式匹配  区分大小写(Case-Sensitive)的筛选器  1.3 大型对象(Large Object,LOB)  MAX 说明符  BULK行集提供程序  1.4 隐式转换(Implicit ...

    MySQL SQL查询优化最佳实践

    详细介绍慢查询日志及示例演示,MySQL查询优化器介绍及特定SQL的查询优化等 1.获取有性能问题的SQL的三种方法 2.慢查询日志概述 3.慢查询日志实例 ...6.如何确定查询处理各个阶段所消耗的时间 7.特定SQL的查询优化

    从入门到精通:全面掌握SQL语言的深度教程

    1、本教程专门为初学者和进阶者打造,将带你从SQL基础语法学习开始,一步步探索数据查询、数据操作、统计运算等复杂语法,并附有丰富实例和项目资源。 2、它能让你创建、查询、更新和删除数据库的...4、复杂SQL案例示例

    SQL21日自学通

    SQL 对视图的处理过程197 在SELECT 语句使用约束201 在视图中修改数据201 在视图中修改数据的几个问题203 通用应用程序的视图204 删除视图语句207 使用索引207 什么是索引207 使用索引的技巧212 对更多的字段进行...

    sqlserver中datetime属性巧用

    日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示...

    21天学会SQL

    本书中也使用了一篇专门讲解了与商业智能有关的一些内容。 本书总分为5篇,共21章。第一篇主要讲解数据库的基础,包括数据库的概念及安装。第二篇讲解数据库管理的常用知识,包括数据库的管理、表的管理、确保数据的...

    Microsoft SQL Server 2005 Express Edition SP3

    3.3 SQL Server Express 联机丛书中包含关于操作系统支持的错误信息。 SQL Server Express 联机丛书中的“硬件和软件要求 (SQL Server Express)”主题中没有提供操作系统的精确列表。SQL Server Express 支持下列...

    SQL Server 2008 商业智能完美解决方案(3)

    《SQL Server 2008商业智能完美解决方案》结合专家团队提供的实际示例和丰富经验进行介绍,让读者能够直观轻松地掌握构建商业智能(BI)解决方案的概念、工具和技术,是一本不可多得的商业智能开发参考指南。...

    经典SQL语句大全

    SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5 13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 7.3.2 使用T-SQL创建数据库 7.4 修改数据库及其选项 7.4.1 在SQL Server Management Studio中...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     7.2.3 检查系统和示例数据库 164  7.2.4 检查数据库对象 164  7.3 创建数据库 166  7.3.1 在SQL Server Management Studio中创建数据库 167  7.3.2 使用T-SQL创建数据库 170  7.4 修改数据库及其选项 171  ...

    经典全面的SQL语句大全

    Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。 再谈随机数  现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...

Global site tag (gtag.js) - Google Analytics