计算机教程

当前位置:澳门娱乐场网址 > 计算机教程 > SQL SERVER 2000日期处理(转)【澳门娱乐场网址】

SQL SERVER 2000日期处理(转)【澳门娱乐场网址】

来源:http://www.ablakeforum.com 作者:澳门娱乐场网址 时间:2020-03-11 21:58

datetime 和 smalldatetime 代表日期和一天内的时间的日期和时间数据类型。 Microsoft SQL Server 用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date 之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。第一个4 字节:1900 年1 月1 日当日为0 ;之前的日期是负数;之后日期是正数。另外一个 4 字节存储以午夜后3 1/3 毫秒数所代表的每天的时间。 smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime 。 SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。 可以将这两种类型转换成float 浮点数, 其中整数部分就是对应的日期字节, 而小数部分是时间相应的比例, 如datetime 的小数部分就是占整天的毫秒数的比例;smalldatetime 的小数部分就是占整天的分钟数的比例. 因此我们可以直接将这两种类型的变量和整数、浮点数进行直接的加减。 datetime 从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒。如下表所示,把值调整到 .000 、.003 、或 .007 秒的增量。 示例 调整后的示例 01/01/98 23:59:59.999 1998-01-02 00:00:00.000 01/01/98 23:59:59.995,01/01/98 23:59:59.996, 01/01/98 23:59:59.997, 或01/01/98 23:59:59.998 1998-01-01 23:59:59.997 01/01/98 23:59:59.992, 01/01/98 23:59:59.993, 01/01/98 23:59:59.994 1998-01-01 23:59:59.993 01/01/98 23:59:59.990 或01/01/98 23:59:59.991 1998-01-01 23:59:59.990 我们常常需要搜索指定日期范围内的数据, 比如返回1998-01-01 当天内的数据, 你可能会这样写: date = ‘1998-01-01 00:00:00.000' and date = ‘1998-01-01 23:59:59.999 ' 根据上面的调整规则, 其实这句语句的实际搜索范围为: date = ‘1998-01-01 00:00:00.000' and date = ‘1998-01-02 00:00:00.000 ' 你会看到这包括了1998-01-02 的数据, 所以最好的正确的搜索语句为: date = ‘1998-01-01 00:00:00.000' and date ‘1998-01-02 00:00:00.000 ' smalldatetime 从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据精确到分钟。29.998 秒或更低的 smalldatetime 值向下舍入为最接近的分钟,29.999 秒或更高的 smalldatetime 值向上舍入为最接近的分钟。 --returns time as 12:35 SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime) GO --returns time as 12:36 SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime) GO 赋值: 上面说了时间的实际格式,我们在给一个时间变量赋值时肯定不会赋一个浮点数给该变量,更多的情况是我们给这个变量赋一个字符串,系统会自动将字符串变成时间格式并保存到数据库中。若字符格式错误,则报错。根据语言不同,世界上有多种不同的用字符串表示时间方式,我们可以通过 sp_helplanguage 查看不同语言下的缺省时间格式,如简体中文的时间格式为 ymd ,可以通过 SET DATEFORMAT 来暂时更改这个缺省值。 时间函数 DATEADD :可以对时间类型的指定部分进行加减计算,虽然我们上面说了可以进行直接的加减,但是我们可以更方便的利用这个函数对指定部分,如年月日时分秒等进行加减。我们常常根据一个时间来构造出另外一个时间,比如下个月的今天 , 本月底等等,我们应该也尽量使用 DATEADD 函数来构造,它可以避免一些闰月、年底、月底之类的错误,我以前就是根据 DATENAME 来构造的,常常要考虑这些问题。 DATEDIFF :该函数对两个时间变量对指定部分进行比较计算。此函数不考虑比指定日期部分更高的粒度级别,它只考虑更低级别的部分。对时间的比较应尽量使用本函数。 举个出错的例子:返回两个时间变量的小时差。若使用 DATEPART(HOUR, @T2 - @T1) 就可能会出错;你应该使用 DATEDIFF(HOUR, @T1, @T2) 。 DATEPART :返回时间变量的指定部分的值。 DATENAME :返回时间变量的指定部分的值,和 DATAPART 不同的是本函数返回的是个字符串类型 GETDATE() 返回本机器的当前时间。 CURRENT_TIMESTAMP 变量与本函数功能相同。 GETUTCDATE() 返回本机器的当前 UTC 时间。

参数及返回值数据类型说明

Month

自年初开始的第几个星期

--单纯的时间
SET @dt='00:00:01'
SELECT CAST(@dt as binary(8))
--结果: 0x000000000000012C

例如,下面的代码在输入时,其时间精确度为百分之一秒,但经数据库保存后再显示出来,其结果就已经做了处理。
DECLARE @t TABLE(date char(21))
INSERT @t SELECT '1900-1-1 00:00:00.000'
INSERT @t SELECT '1900-1-1 00:00:00.001'
INSERT @t SELECT '1900-1-1 00:00:00.009'
INSERT @t SELECT '1900-1-1 00:00:00.002'
INSERT @t SELECT '1900-1-1 00:00:00.003'
INSERT @t SELECT '1900-1-1 00:00:00.004'
INSERT @t SELECT '1900-1-1 00:00:00.005'
INSERT @t SELECT '1900-1-1 00:00:00.006'
INSERT @t SELECT '1900-1-1 00:00:00.007'
INSERT @t SELECT '1900-1-1 00:00:00.008'

ss , s

Millisecond

缩    写

--单纯的日期
SET @dt='1900-1-2'
SELECT CAST(@dt as binary(4))
--结果: 0x00010000

返回int

功能说明

计算的开始日期和终止日期,可以是日期或日期格式的字符串。计算的方法是从enddate减去startdate。如果startdate比enddate晚,返回负值。当结果超出整数值范围,DATEDIFF就产生错误。对于毫秒,最大数是24天20小时31分钟23.647秒。对于秒,最大数是68年。
计算跨分钟、秒和毫秒这些边界的方法,使得DATEDIFF给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的datepart边界数。例如,在2005年1月4日和2005年2月11日之间的月份数是1。

1.2.2 日期信息获取函数
日期信息获取函数用于获取日期指定部分的相关信息,常用的日期信息获取函数如表2-2所示。
常用的日期信息获取函数
表2.2

Month

1.GETDATE
GETDATE按照datetime值返回当前系统日期和时间。
GETDATE的语法如下:
GETDATE()
返回类型:datetime

毫秒

Dayofyear

注意:
在SQL Server中,由于直接提供的日期均是以日期格式的字符串提供,所以在使用CONVERT进行日期格式转换时,要先把日期格式的字符串转换为日期型,然后才能利用CONVERT进行日期格式转换,否则就变成字符串转换为字符串,此时的style选项是无效的。
返回类型:由参数data_type确定。

yy , yyyy

dd , d

DAY(date)

Dayofyear

¡ number:是用来增加datepart的值。正数表示增加,负数表示减少,如果指定的是非整数值,则忽略此值的小数部分,不做四舍五入处理。例如,DATEADD(Day,1.7,date),表示date增加1天。
¡ date:是返回datetime或smalldatetime值或日期格式字符串的表达式。
如果date是smalldatetime,则返回smalldatetime,否则返回datetime。date为smalldatetime,Datepart为Second(ss,s)或Millisecond(ms)时,返回值将根据日期增减的结果调整到分钟;date为datetime,Datepart为Millisecond(ms)时,返回值将根据日期增减的结果调整为百分之三秒。调整规则可以参考2.1节的相关说明。
date允许直接与number进行增减计算,即对于DATEADD(Day,number,date),等同于date number。

dy,y

wk , ww

星期

说明:

年份

1.2.1 日期增减函数
日期增减函数可以对日期指定部分的值进行增减,并返回处理后的日期值,SQL Server提供的日期增减函数为DATEADD。

Weekday

季度

Hh

返回表示指定日期中的天的整数

datepart是指定应返回的日期部分的参数,其定义如表2-3所示。date是返回datetime或smalldatetime值或日期格式字符串的表达式。DATENAME函数返回nvarchar,DATEPART函数返回int

Minute


返回int

2.ISDATE
ISDATE确定输入的表达式是否有效日期。
在输入日期表达式时,日期都是以日期格式的字符串提供的,由于不同的区域有不同的日期格式,所以并不能保证输入的日期表达式能够被SQL Server识别,这种情况下,就需要用ISDATE来判断日期表达式能否正确地被SQL Server识别了。
ISDATE的语法如下:
ISDATE(expression)
返回类型:int

Second

Millisecond

/*--结果
date                     转换后的日期

mi , n

季度

分钟

qq , q

小时

星期几(例如星期一、星期二)

Quarter

dd , d

--单纯的时间
SET @dt='00:10'
SELECT CAST(@dt as binary(4))
--结果: 0x0000000A

返回类型:integer

Year

Hh

日期部分

wk , ww

Day

SELECT date,转换后的日期=CAST(date as datetime) FROM @t

--2. Style=101时,表示日期字符串为:dd/mm/yyyy格式
SELECT CONVERT(datetime,'11/1/2003',103)
--结果:2003-01-11 00:00:00.000

月份

年份

Hour

本文由澳门娱乐场网址发布于计算机教程,转载请注明出处:SQL SERVER 2000日期处理(转)【澳门娱乐场网址】

关键词: