`
moonrub
  • 浏览: 41268 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
  • 22cgreen: new 也是类加载器加载,也是类加载机制,可以说JAVA类进入 ...
    newinstance

SQL数据的基本操作(时间和日期)

阅读更多
日期和时间函数对建立一个站点是非常有用的。站点的主人往往对一个表中的数据何时被

更新感兴趣。通过日期和时间函数,你可以在毫秒级跟踪一个表的改变。

返回当前日期和时间

通过函数GETDATE(),你可以获得当前的日期和时间。例如,语句SELECT GETDATE()

返回如下的结果:

……………………………

NOV 30 1997 3:29AM

(1 row(s) affected)

显然,如果你将来使用这个函数,你得到的日期将比这个时间晚,或者更早。

函数GETDATE()可以用来作为DATEDIME()型字段的缺省值。这对插入记录时保存

当时的时间是有用的。例如,假设有一个表用来保存你站点上的活动日志。每当有一个访

问者访问到你的站点时,就在表中添加一条新记录,记下访问者的名字,活动,和进行访

问的时间。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME

型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:

CREATE TABLE site_log (

username VARCHAR(40),

useractivity VARCHAR(100),

entrydate DATETIME DEFAULT GETDATE())

转换日期和时间

你也许已经注意到,函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever

内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)。

要得到不同格式的日期和时间,你需要使用函数CONVERT()。例如,当下面的这个语句

执行时,显示的时间将包括毫秒:

SELECT CONVERT(VARCHAR(30),GETDATE(),9)

注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。

当这个语句执行时,将显示如下的日期和时间:

…………………………………..

Nov 30 1997 3:29:55:170AM

(1 row(s) affected)

在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。下表显示了所

有的格式。

表的日期和时间类型

类型值 标准输出

0 Default mon dd yyyy hh:miAM

1 USA mm/dd/yy

2 ANSI yy.mm.dd

3 British/French dd/mm/yy

4 German dd.mm.yy

5 Italian dd-mm-yy

6 - dd mon yy

7 - mon dd,yy

8 - hh:mi:ss

Default + milliseconds--mon dd yyyy

hh:mi:ss:mmmAM(or )

10 USA mm-dd-yy

11 JAPAN yy/mm/dd

12 ISO yymmdd

13 Europe Default + milliseconds--dd mon yyyy

hh:mi:ss:mmm(24h)

14 - hh:mi:ss:mmm(24h)

类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类

型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov

代表November).

对上表中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年

将显示为2000年)。例如,要按日本标准显示日期,包括世纪,你应使用如下的语句:

SELECT CONVERT(VARCHAR(30),GETDATE(),111)

在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30

抽取日期和时间

在许多情况下,你也许只想得到日期和时间的一部分,而不是完整的日期和时间。例如,

假设你想列出你的站点目录中每个站点被查询的月份。这时你不希望完整的日期和时间把

网页弄乱。为了抽取日期的特定部分,你可以使用函数DATEPART(),象这样:

SELECT site_name ‘Site Name’,

DATEPART(mm,site_entrydate) ‘Month Posted’ FROM site_directory

函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个

变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。

下面是这个SELECT 语句的输出结果:

Site Name Month Posted

………………………………………………………………

Yahoo 2

Microsoft 5

Magicw3 5

(3 row(s) affected)

Month Posted列显示了每个站点被查询的月份。函数DATEPART()的返回值是一个整数。

你可以用这个函数抽取日期的各个不同部分,如下表所示。

表的日期的各部分及其简写

日期部分 简写值

year yy 1753--9999

quarter qq 1--4

month mm 1--12

day of year dy 1--366

day dd 1--31

week wk 1--53

weekday dw 1--7(Sunday--Saturday)

hour hh 0--23

minute mi 0--59

second ss 0--59

milisecond ms 0--999

当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的。但是,

上例中的查询结果(2,5)不是十分易读。要以更易读的格式得到部分的日期和时间你可

以使用函数DATENAME(),如下例所示:

SELECT site_name ‘Site Name’

DATENAME(mm,site_entrydate) ‘Month Posted’

FROM site_directory

函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回值是一个

字符串,而不是一个整数。下面是上例该用DATENAME()得到的结果:

Site Name Month Postec

………………………………………………………………….

Yahoo February

Microsoft June

Magicw3 June

(3 row(s) affected)

你也可以用函数DATENAE()来抽取一个星期中的某一天。下面的这个例子同时抽取一

周中的某一天和日期中的月份:

SELECT site_name ‘Site Name’,

DATENAME(dw,site_entrydate)+ ‘-’ + DATENAME(mm,site_entrydate)

‘Day and Month Posted’ FORM site_directory

这个例子执行时,将返回如下的结果:

Site Name Day and Month Posted

………………………………………………………………………

Yahoo Friday - February

Microsoft Tuesday - June

Magicw3 Monday - June

(3 row(s) affected)

返回日期和时间范围

当你分析表中的数据时,你也许希望取出某个特定时间的数据。你也许对特定的某一天

中――比如说2000年12月25日――访问者在你站点上的活动感兴趣。要取出这种类型的

数据,你也许会试图使用这样的SELECT语句:

SELECT * FROM weblog WHERE entrydate=“12/25/20000”

不要这样做。这个SELECT语句不会返回正确的记录――它将只返回日期和时间是

12/25/2000 12:00:00:000AM的记录。换句话说,只有刚好在午夜零点输入的记录才被返回。

注意:

在本文中,假设字段entrydate是DATETIME型,而不是SMALLDATETIME型。

本节的讨论对SMALLDATETIME型字段也是适用的,不过SMALLDATETIME型字段只

能精确到秒。

问题是SQL Sever将用完整的日期和时间代替部分日期和时间。例如,当你输入一个日期,

但不输入时间时,SQL Sever将加上缺省的时间“12:00:00:000AM”。当你输入一个时

间,但不输入日期时,SQL Sever将加上缺省的日期“Jan 1 1900”。

要返回正确的记录,你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如,

下面的这个SELECT 语句将能返回正确的记录:

SELECT * FROM weblog

WHERE entrydate>=“12/25/2000” AND entrydate<“12/26/2000”

这个语句可以完成任务,因为它选取的是表中的日期和时间大于等于12/25/2000

12:00:00:000AM并小于12/26/2000 12:00:00:000AM的记录。换句话说,它将正确地返回2000

年圣诞节这一天输入的每一条记录。

另一种方法是,你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“%”,

你可以匹配一个特定日期的所有时间。这里有一个例子:

SELECT * FROM weblog WHERE entrydate LIKE ‘Dec 25 2000%’

这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。

使用这两种匹配日期和时间范围的函数,你可以选择某个月,某一天,某一年,某个小时,

某一分钟,某一秒,甚至某一毫秒内输入的记录。但是,如果你使用LIKE 来匹配秒或毫

秒,你首先需要使用函数CONVERT()把日期和时间转换为更精确的格式(参见前面 “转

换日期和时间”一节)。

比较日期和时间

最后,还有两个日期和时间函数对根据日期和时间取出记录是有用的。使用函数DATEADD

()和DATEDIFF(),你可以比较日期的早晚。例如,下面的SELECT语句将显示表中

的每一条记录已经输入了多少个小时:

SELECT entrydate ‘Time Entered’

DATEDIFF(hh,entrydate,GETDATE()) ‘Hours Ago’ FROM weblog

如果当前时间是2000年11月30号下午6点15分,则会返回如下的结果:

Time Entered Hours Ago

…………………………………………………..

Dec 30 2000 4:09PM 2

Dec 30 2000 4:13PM 2

Dec 1 2000 4:09PM 698

(3 row(s) affected)

函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,

是按小时对日期进行比较,(要了解日期各部分的详细内容,请参考表11.2)在日期2000

年11月1日和2000年11月30日的指定时间之间有689个小时。另外两个参数是要进行

比较的时间。为了返回一个正数,较早的时间应该先给。

函数DATEADD()把两个日期相加。当你需要计算截止日期这一类的数据时,这个函数

是有用处的。例如,假设访问者必须先注册才能使用你的站点。注册以后,他们可以免费

使用你的站点一个月。要确定什么时候他们的免费时间会用完,你可以使用如下的SELECT

语句:

SELECT username ‘ser Name’,

DATEADD(mm,1,firstvisit_date) ‘Registration Expires’

FROM registration_table

函数DATEADD()的参数有三个变量。第一个变量代表日期的某一部分(参见表11.2),

这个例子用到了代表月份的mm。第二个变量指定了时间的间隔――在本例中是一个月。

最后一个变量是一个日期,在这个例子中,日期是取自DATETIME型字段firstvisit_dat e.

假设当前日期是June 30,2000,这个语句将返回如下的内容:

User Name Registration Expires

…………………………………………………………………………

Bill Gates Jul 30 2000 4:09PM

President Clinton Jul 30 2000 4:13PM

William Shakespeare Jul 1 2000 4:09PM

(3 row(s) affected)

注意:

与你预料的相反,使用函数DATEADD()把一个日期加上一个月,它并不加上30天。这

个函数只简单地把月份值加1。这意味着在11月注册的人将比在2月注册的人多得到2天

或3天的时间。要避免这个问题,你可以用函数DATEADD()直接增加天数,而不是月

份。
分享到:
评论

相关推荐

    SQL数据的基本操作(时间和日期)

    比较实用的一些操作,主要是日期和时间的操作,相信对朋友们会有一定的帮助

    SQL 高级查询技术

    除了前一章介绍的SQL基本功能之外,SQL还可以用来完成其他一些重要且复杂的操作。 对于全世界来说,不同的地点有不同的时间,不同地点的人可能操纵相同数据库中的数据。数据库中需要存储准确的数据,这些数据离不开...

    SQL Server数据库技术大全 电子书

    2.4 SQL数据类型/42 2.4.1 精确数字类型/43 2.4.2 近似数字类型/43 2.4.3 字符串类型/43 2.4.4 Unicode字符串类型/44 2.4.5 二进制串类型/44 2.4.6 日期和时间类型/45 2.4.7 其他数据类型/45 2.5 SQL变量/46 2.6 ...

    精通SQL--结构化查询语言详解

    3.2 sql数据类型 39 3.2.1 字符型数据 39 3.2.2 数字型数据 40 3.2.3 日期数据类型 41 3.2.4 二进制数据类型 43 3.2.5 文本和图形数据类型 44 3.2.6 自定义数据类型 44 3.3 表的创建(create) 46 3.3.1 ...

    六天带你玩转MySQL视频.zip

    12SQL基本操作(新增数据表) 13SQL基本操作(查看数据表) 14SQL基本操作(更新数据表) 15SQL基本操作(删除数据表) 16SQL基本操作(新增数据) 17SQL基本操作(查看数据) 18SQL基本操作(更新数据) 19SQL基本操作(删除数据) ...

    Transact-SQL语句基础

    编程计算任意两个日期的时间差,分别输出年,月,日的差值。 (4)编程求50到100之间多有能被3整除的奇数之和。(5)编写程序,根据姓名查询teaching数据库中学生的基本信息和选课信息,学生姓名通过变量输入。对于...

    SQL SERVER 2000开发与管理应用实例

    本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    21天学会SQL

    4.1.3 日期和时间数据类型 73 4.1.4 其他数据类型 73 4.2 创建数据表 74 4.2.1 创建数据表的语法 74 4.2.2 创建主键 75 4.2.3 使用SSMS创建表 76 4.2.4 创建标识列 78 4.3 修改表结构 79 4.3.1 修改表结构的语法 80 ...

    程序员的SQL金典4-8

     5.3.1 日期、时间、日期时间与时间戳  5.3.2 主流数据库系统中日期时间类型的表示方式  5.3.3 取得当前日期时间  5.3.4 日期增减  5.3.5 计算日期差额  5.3.6 计算一个日期是星期几  5.3.7 取得日期的指定...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    2.7 处理日期和时间数据 2.8 查询元数据 2.9 总结 2.10 练习 2.11 解决方案 第3章 联接查询 3.1 交叉联接 3.2 内联接 3.3 特殊的联接实例 3.4 外联接 3.5 总结 3.6 练习 3.7 解决方案 第4章 子查询 ...

    (第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础

    2.7 处理日期和时间数据 2.8 查询元数据 2.9 总结 2.10 练习 2.11 解决方案 第3章 联接查询 3.1 交叉联接 3.2 内联接 3.3 特殊的联接实例 3.4 外联接 3.5 总结 3.6 练习 3.7 解决方案 第4...

    SQL21日自学通

    日期/时间函数66 ADD_MONTHS 67 LAST_DAY68 MONTHS_BETWEEN 69 NEW_TIME70 NEXT_DAY71 SYSDATE72 数学函数 72 ABS 73 CEIL 和FLOOR 73 COS COSH SIN SINH TAN TANH 73 EXP 75 LN and LOG75 MOD 76 POWER77 SIGN 77 ...

    精通sql结构化查询语句

    1.5 SQL开发环境 1.5.1 SQL环境介绍 1.5.2 SQL的层次结构 1.5.3 SQL环境中的对象 1.5.4 SQL环境中的程序系统 1.6 SQL语句基础 1.6.1 SQL常量 1.6.2 SQL表达式 1.6.3 SQL数据类型 1.6.4 注释符 1.6.5 批处理 1.6.6 ...

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

     2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 25  2.1.4 使用SQL Server 2008管理报表 26  2.2 规划SQL Server 2008的部署 27  2.2.1 建立服务器的性能系统 27  2.2.2 配置I/O子系统 28  2.2.3 确保可用...

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

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    精通SQL 结构化查询语言详解

    19.3 检索、操作SQL数据  19.3.1 不需要游标的SQL DML操作 19.3.2 使用游标的SQL DML操作 19.3.3 动态SQL技术  19.4 SQL Server中嵌入式SQL的编译运行 19.4.1 嵌入式SQL代码  19.4.2 预编译文件  19.4.3...

    mysql基本操作和练习手册.pdf

    整理了mysql的基本操作 和 练习手册. 具体目录: 一 复习前的准备 二 基础知识: 1.数据库的连接 2:库级知识 3: 表级操作: 3.1 显示库下面的表 3.2 查看表的结构: 3.3 查看表的创建过程: 3.4 创建表: 3.5 修改表 4:列...

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

     2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 25  2.1.4 使用SQL Server 2008管理报表 26  2.2 规划SQL Server 2008的部署 27  2.2.1 建立服务器的性能系统 27  2.2.2 配置I/O子系统 28  2.2.3 确保可用...

    sql试 题答案和试题

    9、视图是一种常用的数据对象,它是提供(1___)和(1___)数据的另一种途径,可以简化数据库操作,当使用多个数据表来建立视图时,表的连接不能使用(2___)方式,并且不答应在该语句中包括(3___)等要害字。...

Global site tag (gtag.js) - Google Analytics