数据预管理,三千日期管理

 

日期管理datetime和date之间的互相转变

【转自】
日期是数量管理中时常应用到的消息之1。生日、数据管理时间、安插的展望完毕时间,按年、季、月的总结,那个都属于日期处理的规模。由于日期中带有了年、季、月、日等大多音讯,差别的国家对日期格式、日期文字描述及星期有例外的显明,因而发生了日期管理的复杂。本章主要钻探在SQL
Server数据库中对日期的各类管理办法。

1、日期时间、字符串的管理

日期

Date: 日期类,年与日

POSIXct: 日期时间类,准确到秒,用数字代表

POSIXlt: 日期时间类,准确到秒,用列表表示

Sys.date(), date(), difftime(), ISOdate(), ISOdatetime()

#得到当前日期时间
(d1=Sys.Date())   #日期        年月日
(d3=Sys.time())   #时间        年月日时分秒  通过format输出指定格式的时间
(d2=date())       #日期和时间  年月日时分秒  "Fri Aug 20 11:11:00 1999"

myDate=as.Date('2007-08-09')
class(myDate)     #Date
mode(myDate)      #numeric

#日期转字符串
as.character(myDate)

birDay=c('01/05/1986','08/11/1976') #
dates=as.Date(birDay,'%m/%d/%Y')    #向量化运算,对向量进行转换
dates

# %d    天 (01~31)
# %a    缩写星期(Mon)
# %A    星期(Monday)
# %m    月份(00~12)
# %b    缩写的月份(Jan)
# %B    月份(January)
# %y    年份(07)
# %Y    年份(2007) 
# %H    时
# %M    分
# %S    秒

td=Sys.Date()
format(td,format='%B  %d %Y %s')
format(td,format='%A,%a ')
format(Sys.time(), '%H %h %M %S %s')

#日期转换成数字
as.integer(Sys.Date())  #自1970年1月1号至今的天数
as.integer(as.Date('1970-1-1')) #0
as.integer(as.Date('1970-1-2')) #1

sdate=as.Date('2004-10-01')
edate=as.Date('2010-10-22')
days=edate-sdate
days    #时间类型相互减,结果显示相差的天数

ws=difftime(Sys.Date(),as.Date('1956-10-12'),units='weeks') #可以指定单位

#把年月日拼成日期
(d=ISOdate(2011,10,2));class(d)  #ISOdate 的结果是POSIXct
as.Date(ISOdate(2011,10,2))     #将结果转换为Date

ISOdate(2011,2,30)             #不存在的日期 结果为NA

#批量转换成日期
years=c(2010,2011,2012,2013,2014,2015)
months=1
days=c(15,20,21,19,30,3)

as.Date(ISOdate(years,months,days))

#提取日期时间的一部分
p=as.POSIXlt(Sys.Date())
p=as.POSIXlt(Sys.time())
Sys.Date()
Sys.time()
p$year + 1900   #年份需要加1900
p$mon + 1       #月份需要加1
p$mday

p$hour
p$min
p$sec

字符串管理

nchar() 、length()

paste()、outer()
substr()、strsplit()
sub()、gsub()、grep()、regexpr()、grepexpr()

#字符串
x='hello\rwold\n'

cat(x)    #woldo  hello遇到\r光标移到头接着打印wold覆盖了之前的hell变成woldo
print(x)  #
#字符串长度
nchar(x)  #字符串长度
length(x) #1 向量中元素的个数

#字符串拼接
board=paste('b',1:4,sep='-') #"b-1" "b-2" "b-3" "b-4"
board

mm=paste('mm',1:3,sep='-')   #"mm-1" "mm-2" "mm-3"
mm

outer(board,mm,paste,sep=':') #向量的外积 
  #[,1]       [,2]       [,3]      
  #[1,] "b-1:mm-1" "b-1:mm-2" "b-1:mm-3"
  #[2,] "b-2:mm-1" "b-2:mm-2" "b-2:mm-3"
  #[3,] "b-3:mm-1" "b-3:mm-2" "b-3:mm-3"
  #[4,] "b-4:mm-1" "b-4:mm-2" "b-4:mm-3"


#拆分提取
board
substr(board,3,3) #子串
strsplit(board,'-',fixed=T) #拆分 

#修改
sub('-','.',board,fixed=T) #修改指定字符
board
mm                 #"mm-1" "mm-2" "mm-3"
sub('m','p',mm)    #替换第一个匹配项 "pm-1" "pm-2" "pm-3"
gsub('m','p',mm)   #替换全部匹配项 "pp-1" "pp-2" "pp-3"


#查找
mm=c(mm, 'mm4')   #"mm-1" "mm-2" "mm-3" "mm4"
mm
grep('-',mm)      #1 2 3 向量中1,2,3包含'-'

regexpr('-',mm)   #匹配成功会返回位置信息,没有找到则返回-1

 

日期是数额管理中常常选拔到的信息之一。破壳日、数据处理时间、布署的预测完成时间,按年、季、月的计算,这么些都属于日期处理的局面。由于日期中含有了年、季、月、日等许多音信,不一致的国家对日期格式、日期文字描述及星期有两样的显然,因而发生了日期管理的纷纭。本章首要商讨在SQL Server数据库中对日期的种种管理方式。

一.一 日期类型概述
SQL
Server中的日期类型包涵datetime和smalldatetime,仅能管理能够识别为17伍3年~999玖年间的日子的值,未有单身的日期型或时间型。

2、数据预管理

保障数据品质

准确性
完整性
一致性
冗余性
时效性

 

壹、提取有效数据,供给业务人士协作(主观),及有关的工夫花招保证

二、理解多少定义,统1对数码定义的通晓

 

数量集成 : 对许多据源举行整合
多少转变 :
数量清洗 : 分外数据,缺点和失误数据
多少约简 : 提炼,行,列

澳门葡京备用网址 1

 

日期类型概述

SQL Server中的日期类型蕴含datetime和smalldatetime,仅能管理能够辨别为17五三年~999九年间的日子的值,未有单独的日期型或时间型。

1.datetime
datetime类型管理从175三年四月5日~999玖年一月10日的日期和岁月数额,准确度为百分之三秒。即:对于0.000~0.00一、0.00玖的日期值,调治为0.000;对于0.00二~0.00四的日子值,调度为0.003;对于0.00伍~0.00八的日期值,调解为0.007。

3、数据集成

透过merge对数据开始展览集成

#数据集成
#merge pylr::join (包::函数)
(customer = data.frame(Id=c(1:6),State=c(rep("北京",3),rep("上海",3))))
(ol = data.frame(Id=c(1,4,6,7),Product=c('IPhone','Vixo','mi','Note2')))


merge(customer,ol,by=('Id'))  #inner join
merge(customer,ol,by=('Id'),all=T) # full join
merge(customer,ol,by=('Id'),all.x=T)  # left outer join 左链接,左边数据都在
merge(customer,ol,by=('Id'),all.y=T)  # right outer join 右链接,右边数据都在


#union 去重 在df1 和df2 有相同的列名称下 
(df1=data.frame(id=seq(0,by=3,length=5),name=paste('Zhang',seq(0,by=3,length=5))))
(df2=data.frame(id=seq(0,by=4,length=4),name=paste('Zhang',seq(0,by=4,length=4))))

rbind(df1,df2)

merge(df1,df2,all=T)     #去重,不使用by

merge(df1,df2,by=('id')) #重名的列会被更改显示

 

1.datetime

datetime类型管理从17伍叁年七月二十八日~999九年1月31日的日期和时间数额,精确度为百分之三秒。即:对于0.000~0.001、0.00玖的日子值,调节为0.000;对于0.00二~0.00四的日期值,调解为0.00三;对于0.005~0.00八的日子值,调节为0.00七。

诸如,上面包车型大巴代码在输入时,其时间正确度为百分之一秒,但经数据库保存后再展现出来,其结果就已经做了拍卖。

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.009’

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

 

/*–结果

date                     转变后的日期



1900-1-1 00:00:00.000    1900-01-01 00:00:00.000
数据预管理,三千日期管理。…
1900-1-1 00:00:00.000    1900-01-01 00:00:00.010

–*/

datetime的仓库储存长度为八字节,日期和时间各用5个字节存储,第二个四字节囤积自一九零5年5月二十四日在此以前或之后的小运(以一九〇一年7月二日为分界点,在1九零零年八月17日事先的日子的气数小于0,在1904年11月11日之后的日子的运气大于0)。别的一个4字节积累以上午(00:00:00.000)后皮秒数所代表的每日的年月。

比方说,下边包车型大巴代码演示了datetime变量中,仅包蕴单纯的日子和单纯的日马时,日期存款和储蓄的十6进制存款和储蓄表示结果。

DECLARE @dt datetime

 

–单纯的日子

SET @dt=’1900-1-2′

SELECT CAST(@dt as binary(8))

–结果: 0x0000000100000000

 

–单纯的年月

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’

肆、数据转变

协会属性
规范化(极差化、标准化)
离散化
改善布满

 

2.smalldatetime

smalldatetime类型管理从190四年10月一日~207玖年12月陆 日的日子和岁月数额,正确到分钟。2九.998秒或更低的smalldatetime值向下舍入为最相近的分钟,2九.99玖秒或更加高的smalldatetime值向上舍入为最接近的分钟。

smalldatetime的积攒长度为4字节,第贰个2字节囤积自一玖零二年3月17日过后的天命。别的3个2字节积攒晚上(00:00:00.000)后的秒钟数。

譬如,上边包车型大巴代码演示了smalldatetime变量中,仅包蕴单纯的日期和仅仅的光阴时,日期存储的十六进制存款和储蓄表示结果。

DECLARE @dt smalldatetime

–单纯的日子

SET @dt=’1900-1-2′

SELECT CAST(@dt as binary(4))

–结果: 0x00010000

–单纯的岁月

SET @dt=’00:10′

SELECT CAST(@dt as binary(4))
–结果: 0x0000000A

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

日子管理函数

日子由年、月、日、时等多个部分构成,它的拍卖相对复杂,由此,SQL Server提供了多量的日子管理函数,用以达成各类日期数据的拍卖。精晓好那个函数,对形成数据库的种种日期管理12分须求,本节将介绍几个常用的日期处理函数。期增减函数能够对日期钦定部分的值举办增减,并回随管理后的日期值,SQL Server提供的日子增减函数为DATEADD。

DATEADD的具体语法如下:DATEADD ( datepart , number, date )

里面包含以下参数。

¡ 
datepart:是显明应向日期的哪部分重临新值的参数。表二-一列出了SQL Server扶助的日子部分、缩写及意义。

                    DATEADD、DATEDIFF援救的日子部分、缩写及意义

日 期 部 分

缩   

含   

Year

yy , yyyy

年份

Quarter

qq , q

季度

Month

mm , m

月份

Dayofyear

dy,y

Day

dd , d

Week

wk , ww

星期

Hour

Hh

小时

Minute

mi , n

分钟

Second

ss , s

Millisecond

Ms

毫秒

 

¡  number:是用来扩张datepart的值。正数表示扩张,负数表示收缩,就算钦定的好坏整数值,则忽略此值的小数部分,不做肆舍伍入管理。举例,DATEADD(Day,一.7,date),表示date扩张一天。

¡  date:是回到datetime或smalldatetime值或日期格式字符串的表明式。

假如date是smalldatetime,则赶回smalldatetime,不然再次来到datetime。date为smalldatetime,Datepart为Second(ss,s)或Millisecond(ms)时,重临值将依照日期增减的结果调治到分钟;date为datetime,Datepart为Millisecond(ms)时,重临值将依靠日期增减的结果调治为百分之三秒。调解规则能够参见2.一节的连带注明。

date允许直接与number进行增减总括,即对于DATEADD(Day,number,date),等同于date+number。

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

 日期音讯获得函数

日子音信得到函数用于获取日期钦赐部分的有关新闻,常用的日期新闻获得函数如表2-二所示。

                                     
常用的日子新闻得到函数

功 能 说 明

语   

参数及重回值数据类型表达

归来代表内定日期的钦点日期部分的字符串

DATENAME(datepart,date)

datepart是钦命应再次回到的日子部分的参数,其定义如表二-3所示。date是回去datetime或smalldatetime值或日期格式字符串的表明式。DATENAME函数再次来到nvarchar,DATEPART函数再次回到int

再次来到代表内定日期的钦定日期部分的平头

DATEPART(datepart,date)

回去表示钦命日期中的年份的整数

YEAR(date)

返回int

归来表示钦赐日期中的月份的整数

MONTH(date)

返回int

回去表示钦点日期中的天的平头

DAY(date)

返回int

                  DATENAME、DATEPART帮助的日期部分、缩写及意义

日 期 部 分

缩   

含   

Year

yy , yyyy

年份

Quarter

qq , q

季度

Month

mm , m

月份

Dayofyear

dy , y

Day

dd , d

Week

wk , ww

自年开首于的第多少个礼拜

Weekday

Dw

星期几(比如星期壹、礼拜五)

Hour

Hh

小时

Minute

mi , n

分钟

Second

ss , s

秒。date为smalldatetime时,始终重临0

Millisecond

Ms

微秒。date为smalldatetime时,始终重临0,为datetime时,再次回到百份之三秒

 

DATEPART(Week,date)重回的礼拜总括办法,是根据星期二为七日的第贰天,那一点与中华夏族民共和国人的日子管理习于旧贯分歧,在行使时要小心这点。DATENAME函数再次回到钦赐日期的钦赐日期部分的字符串,其回到的有血有肉字符串值,与SET DATEFI奇骏ST及SET DATELANGUAGE选项的安装有关。使用DATEPART(Weekday,date)时,其归来的值与SET DATEFI翼虎ST选项的设置有关,具体的将要贰.三节中说明。


  日期差值总结函数

日期差值总结函数用于计算七个给定日期钦赐部分的分界数,SQL Server提供的日期差值计算函数为DATEDIFF。

DATEDIFF的切实语法如下:

DATEDIFF ( datepart , startdate , enddate )

当中囊括以下参数。

¡ 
datepart:规定了应在日期的哪部分图谋差额,其定义如表二-1所示。

¡ 
startdate:规定了总计的开端日期。

¡ 
enddate:规定了总结的甘休日期。

回来类型:integer

计量的启幕日期和截止日期,可以是日期或日期格式的字符串。总括的办法是从enddate减去startdate。假使startdate比enddate晚,重临负值。当结果超过整数值范围,DATEDIFF就爆发错误。对于微秒,最大数是二肆天20钟头叁拾四分钟二三.6四七秒。对于秒,最大数是6八年。

计算跨分钟、秒和阿秒这一个边界的法子,使得DATEDIFF给出的结果在方方面面数据类型中是均等的。结果是带正负号的整数值,其相当于跨第三个和第二个日之间的datepart边界数。举个例子,在二〇〇六年3月11日和200伍年三月四日之内的月度数是壹。

1900-1-1 00:00:00.000    1900-01-01 00:00:00.000
1900-1-1 00:00:00.001    1900-01-01 00:00:00.000
1900-1-1 00:00:00.009    1900-01-01 00:00:00.010
1900-1-1 00:00:00.002    1900-01-01 00:00:00.003
1900-1-1 00:00:00.003    1900-01-01 00:00:00.003
1900-1-1 00:00:00.004    1900-01-01 00:00:00.003
1900-1-1 00:00:00.005    1900-01-01 00:00:00.007
1900-1-1 00:00:00.006    1900-01-01 00:00:00.007
1900-1-1 00:00:00.007    1900-01-01 00:00:00.007
1900-1-1 00:00:00.008    1900-01-01 00:00:00.007
–*/

 其余日期管理有关函数

其它常用的日子处理有关函数包蕴以下多少个。

datetime的仓库储存长度为捌字节,日期和时间各用5个字节存款和储蓄,第2个4字节囤积自一九〇〇年七月一日事先或之后的小运(以190二年四月三1十二日为分界点,在1901年五月5日事先的日子的气数小于0,在一玖〇四年1月1十六日从此的日子的运气大于0)。此外二个4字节积攒以早上(00:00:00.000)后纳秒数所代表的每日的光阴。
譬如,上边包车型地铁代码演示了datetime变量中,仅包罗单纯的日子和仅仅的时申时,日期存款和储蓄的十陆进制存储表示结果。
DECLARE @dt datetime

1.GETDATE

GETDATE依据datetime值重临当前系统日期和时间。

GETDATE的语法如下:

GETDATE()

回来类型:datetime

–单纯的日子
SET @dt=’1900-1-2′
SELECT CAST(@dt as binary(8))
–结果: 0x0000000100000000

2.ISDATE

ISDATE鲜明输入的表明式是或不是行得通日期。

在输入日期表达式时,日期都以以日期格式的字符串提供的,由于分化的区域有分歧的日期格式,所以并不可能确认保障输入的日子表明式能够被SQL Server识别,那种景色下,就必要用ISDATE来推断日期表明式能还是无法正确地被SQL Server识别了。

ISDATE的语法如下:

ISDATE(expression)

重返类型:int

–单纯的光阴
SET @dt=’00:00:01′
SELECT CAST(@dt as binary(8))
–结果: 0x000000000000012C

3.CONVERT

CONVERT将某种数据类型的表明式显式调换为另1种数据类型。

严厉来讲,CONVERT不属于日期处理函数,只是它被常常用来日期处理中,所以那边把它列入了别样日期管理函数,下边是CONVERT的用法描述(只珍视说明在日期管理中的应用)。

CONVERT的有血有肉语法如下:

CONVERT ( data_type [ ( length ) ] , expression [
, style ] )

里头包罗以下参数。

¡ 
expression:是要改换数据类型的有用SQL Server表明式。

¡ 
data_type:是expression调换后的数据类型,length是对于有精度定义需求的data_type的精度定义,对于从未精度定义须要的data_type,该参数能够差不离。

¡  style:定义数据类型调换时的格式,对于日期类型的调换,它的定义如表二-4所示。

表2-四                                     
style在日期调换中的表达

不带世纪数位

带世纪数位

标    准

输入/输出

0或100

默认值

mon dd yyyy hh:miAM(或 PM)

1

101

美国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英国/法国

dd/mm/yy

4

104

德国

dd.mm.yy

5

105

意大利

dd-mm-yy

6

106

dd mon yy

7

107

mon dd, yy

8

108

hh:mm:ss

9或109

默认值+毫秒

mon dd yyyy hh:mi:ss:mmmAM(或PM)

10

110

美国

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

13或113

欧洲默认值+毫秒

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

hh:mi:ss:mmm(24h)

20或120

ODBC规范

yyyy-mm-dd hh:mm:ss[.fff]

21或121

ODBC规范(带毫秒)

yyyy-mm-dd hh:mm:ss[.fff]

126

ISO8601

yyyy-mm-ddThh:mm:ss.mmm

130

Hijri

dd mon yyyy hh:mi:ss:mmmAM

131

Hijri

dd/mm/yy hh:mi:ss:mmmAM

 

 

说明:


输入/输出:“输入”表示从字符串调换为日期时字符串的日期格式,“输出”指从日期转变为字符串时的日期字符串格式。

二 
Hijri:是享有三种变化方式的日历系统,SQL Server使用在那之中的科威特算法。

 

当从smalldatetime转变为字符数据时,由于smalldatetimer只保留到分钟的多寡,因而,对于富含秒或飞秒的体裁,就要秒或纳秒的职位上显得零。当从datetime或smalldatetime值进行调换时,能够透过动用方便的char或varchar数据类型长度来截断没有供给的日子部分。

 

注意:

在SQL
Server中,由于一贯提供的日期均是以日期格式的字符串提供,所以在选用CONVERT进行日期格式调换时,要先把日子格式的字符串转换为日期型,然后才能运用CONVERT实行日期格式调换,不然就产生字符串转变为字符串,此时的style选项是不行的。

 

回去类型:由参数data_type确定。

下边是选拔CONVERT进行日期转换的简约示例:

/*== 字符转变为日期时,Style的施用 ==*/

–1. Style=10一时,表示日期字符串为:mm/dd/yyyy格式

SELECT CONVERT(datetime,’11/1/2003′,101)

–结果:2003-11-01 00:00:00.000

–贰. Style=10一时,表示日期字符串为:dd/mm/yyyy格式

SELECT CONVERT(datetime,’11/1/2003′,103)

–结果:2003-01-11 00:00:00.000

 

/*== 日期转变为字符串 ==*/

DECLARE @dt datetime

SET @dt=’2003-1-11′

–一. Style=拾1时,表示将日期转变为:mm/dd/yyyy 格式

SELECT CONVERT(varchar,@dt,101)

–结果:01/11/2003

–二. Style=十叁时,表示将日期转变为:dd/mm/yyyy 格式

SELECT CONVERT(varchar,@dt,103)

–结果:11/01/2003

 

/*== 那是众四个人时常犯的谬误,对非日期型调换使用日期的style样式
==*/

SELECT CONVERT(varchar,’2003-1-11′,101)

–结果:2003-1-11

2.smalldatetime
smalldatetime类型管理从1901年八月13日~207玖年5月20日的日子和岁月数额,正确到分钟。2九.998秒或更低的smalldatetime值向下舍入为最相仿的分钟,29.99九秒或更高的smalldatetime值向上舍入为最周围的分钟。
smalldatetime的积存长度为4字节,第贰个二字节囤积自1901年14月二十四日之后的天命。别的2个2字节储存下午(00:00:00.000)后的分钟数。
比如说,上面的代码演示了smalldatetime变量中,仅包涵单纯的日子和仅仅的小运时,日期存款和储蓄的十6进制存款和储蓄表示结果。
DECLARE @dt smalldatetime

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

–单纯的时刻
SET @dt=’00:10′
SELECT CAST(@dt as binary(4))
–结果: 0x0000000A

一.二 日期管理函数
日期由年、月、日、时等八个部分组成,它的拍卖绝对复杂,因而,SQL
Server提供了大气的日子处理函数,用以达成各个日期数据的拍卖。领悟好那些函数,对成就数据库的各类日期管理非凡供给,本节将介绍多少个常用的日期管理函数。

一.贰.一 日期增减函数
日子增减函数能够对日期钦定部分的值举行增减,并回四管理后的日子值,SQL
Server提供的日期增减函数为DATEADD。

DATEADD的有血有肉语法如下:
DATEADD ( datepart , number, date )
里头包罗以下参数。
¡ datepart:是规定应向日期的哪部分回去新值的参数。表2-一列出了SQL
Server补助的日子部分、缩写及意义。
DATEADD、DATEDIFF帮忙的日期部分、缩写及意义
表2.1

日期部分

缩    写

含    义

Year

yy , yyyy

年份

Quarter

qq , q

季度

Month

mm , m

月份

Dayofyear

dy,y

Day

dd , d

Week

wk , ww

星期

Hour

Hh

小时

Minute

mi , n

分钟

Second

ss , s

Millisecond

Ms

毫秒

¡
number:是用来扩展datepart的值。正数表示扩大,负数表示减弱,即便钦点的长短整数值,则忽略此值的小数部分,不做4舍5入管理。举例,DATEADD(Day,一.7,date),表示date扩展一天。
¡ date:是回去datetime或smalldatetime值或日期格式字符串的表明式。
假若date是smalldatetime,则赶回smalldatetime,不然再次回到datetime。date为smalldatetime,Datepart为Second(ss,s)或Millisecond(ms)时,再次回到值将依据日期增减的结果调解到分钟;date为datetime,Datepart为Millisecond(ms)时,重临值将基于日期增减的结果调度为百分之三秒。调治规则能够参见二.一节的相干表明。
date允许间接与number进行增减总括,即对于DATEADD(Day,number,date),等同于date+number。

1.二.二 日期音讯获取函数
日子音讯获取函数用于获取日期钦定部分的有关音讯,常用的日子新闻获得函数如表二-二所示。
常用的日子新闻得到函数
表2.2

功能表明

语    法

参数及再次回到值数据类型表达

归来代表钦点日期的内定日期部分的字符串

DATENAME(datepart,date)

datepart是钦命应重回的日子部分的参数,其定义如表2-三所示。date是回去datetime或smalldatetime值或日期格式字符串的表明式。DATENAME函数重返nvarchar,DATEPART函数再次回到int

重临代表内定日期的钦点日期部分的整数

DATEPART(datepart,date)

回去表示钦赐日期中的年份的整数

YEAR(date)

返回int

归来表示钦定日期中的月份的平头

MONTH(date)

返回int

回去表示钦点日期中的天的平头

DAY(date)

返回int

表贰-三                       DATENAME、DATEPART扶助的日子部分、缩写及意义

日子部分

缩    写

含    义

Year

yy , yyyy

年份

Quarter

qq , q

季度

Month

mm , m

月份

Dayofyear

dy , y

Day

dd , d

Week

wk , ww

自年终初阶的第几个礼拜

Weekday

Dw

星期几(比如星期1、星期六)

Hour

Hh

小时

Minute

mi , n

分钟

Second

ss , s

秒。date为smalldatetime时,始终重回0

Millisecond

Ms

阿秒。date为smalldatetime时,始终重临0,为datetime时,重返百份之三秒

DATEPART(Week,date)重返的礼拜计算办法,是比照周6为贰二15日的第3天,那点与华夏人的日子管理习于旧贯差别,在运用时要专注那点。DATENAME函数再次来到钦赐日期的钦定日期部分的字符串,其回来的现实性字符串值,与SET
DATEFICR-VST及SET
DATELANGUAGE选项的装置有关。使用DATEPART(Weekday,date)时,其重回的值与SET
DATEFI福睿斯ST选项的设置有关,具体的就要二.3节中证实。

一.2.三 日期差值总结函数
日子差值总括函数用于总结多个给定日期钦赐部分的界线数,SQL
Server提供的日子差值总结函数为DATEDIFF。
DATEDIFF的现实语法如下:
DATEDIFF ( datepart , startdate , enddate )
里面包涵以下参数。
¡ datepart:规定了应在日期的哪壹部分划算差额,其定义如表二-一所示。
¡ startdate:规定了计算的开头日期。
¡ enddate:规定了总结的终止日期。

回去类型:integer

计量的启幕日期和终止日期,能够是日期或日期格式的字符串。总结的法子是从enddate减去startdate。假诺startdate比enddate晚,返回负值。当结果大于整数值范围,DATEDIFF就产生错误。对于阿秒,最大数是2四天20钟头三13分钟贰三.64七秒。对于秒,最大数是6八年。
算算跨分钟、秒和纳秒这么些边界的格局,使得DATEDIFF给出的结果在全部数据类型中是一样的。结果是带正负号的整数值,其万分跨第3个和首个日之内的datepart边界数。举个例子,在2005年七月二十二十一日和2005年6月10日时期的月份数是壹。

1.二.四  其余日期管理相关函数
别的常用的日期管理有关函数包括以下多少个。

1.GETDATE
GETDATE遵照datetime值再次来到当前系统日期和时间。
GETDATE的语法如下:
GETDATE()
归来类型:datetime

澳门葡京备用网址,2.ISDATE
ISDATE分明输入的表达式是不是管用日期。
在输入日期表明式时,日期都是以日期格式的字符串提供的,由于不一致的区域有例外的日期格式,所以并无法保险输入的日子表明式能够被SQL
Server识别,那种情景下,就需求用ISDATE来判别日期表明式能不能够正确地被SQL
Server识别了。
ISDATE的语法如下:
ISDATE(expression)
回来类型:int

3.CONVERT
CONVERT将某种数据类型的表明式显式调换为另1种数据类型。
严苛来讲,CONVERT不属于日期管理函数,只是它被平日用来日期管理中,所以这里把它列入了别的日期管理函数,下边是CONVERT的用法描述(只着重表明在日期管理中的应用)。
CONVERT的具身体语言法如下:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其间包罗以下参数。
¡ expression:是要改动数据类型的管事SQL Server表明式。
¡
data_type:是expression转变后的数据类型,length是对于有精度定义必要的data_type的精度定义,对于未有精度定义必要的data_type,该参数能够大约。
¡
style:定义数据类型转变时的格式,对于日期类型的转移,它的定义如表贰-四所示。
表2.4
style在日期转变中的说明

不带世纪数位

带世纪数位

标    准

输入/输出

0或100

默认值

mon dd yyyy hh:miAM(或 PM)

1

101

美国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英国/法国

dd/mm/yy

4

104

德国

dd.mm.yy

5

105

意大利

dd-mm-yy

6

106

dd mon yy

7

107

mon dd, yy

8

108

hh:mm:ss

9或109

默认值+毫秒

mon dd yyyy hh:mi:ss:mmmAM(或PM)

10

110

美国

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

13或113

欧洲默认值+毫秒

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

hh:mi:ss:mmm(24h)

20或120

ODBC规范

yyyy-mm-dd hh:mm:ss[.fff]

21或121

ODBC规范(带毫秒)

yyyy-mm-dd hh:mm:ss[.fff]

126

ISO8601

yyyy-mm-ddThh:mm:ss.mmm

130

Hijri

dd mon yyyy hh:mi:ss:mmmAM

131

Hijri

dd/mm/yy hh:mi:ss:mmmAM

说明:

壹输入/输出:“输入”表示从字符串调换为日期时字符串的日期格式,“输出”指从日期调换为字符串时的日子字符串格式。
2 Hijri:是兼备三种转移格局的日历系统,SQL Server使用当中的科威特算法。

当从smalldatetime转变为字符数据时,由于smalldatetimer只保留到分钟的数量,因而,对于富含秒或飞秒的样式,将在秒或纳秒的岗位上出示零。当从datetime或smalldatetime值进行转移时,能够通过运用优良的char或varchar数据类型长度来截断无需的日子部分。

注意:
在SQL
Server中,由于平素提供的日子均是以日期格式的字符串提供,所以在运用CONVERT进行日期格式转变时,要先把日子格式的字符串转变为日期型,然后技能选择CONVERT举行日期格式转变,不然就改为字符串调换为字符串,此时的style选项是无用的。
归来类型:由参数data_type确定。

下边是采用CONVERT进行日期转换的简练示例:
/*== 字符转变为日期时,Style的使用 ==*/
–1. Style=拾壹时,表示日期字符串为:mm/dd/yyyy格式
SELECT CONVERT(datetime,’11/1/2003′,101)
–结果:2003-11-01 00:00:00.000

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

/*== 日期转变为字符串 ==*/
DECLARE @dt datetime
SET @dt=’2003-1-11′
–1. Style=101时,表示将日期转换为:mm/dd/yyyy 格式

SELECT CONVERT(varchar,@dt,101)
–结果:01/11/2003
–贰. Style=十三时,表示将日期转换为:dd/mm/yyyy 格式
SELECT CONVERT(varchar,@dt,103)
–结果:11/01/2003

/*== 这是多多益善人平常犯的荒唐,对非日期型调换使用日期的style样式 ==*/
SELECT CONVERT(varchar,’2003-1-11′,101)
–结果:2003-1-11

Tag标签: SQL Server

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website