SQL日期函数大全
1 / 7
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。
你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。
在使用本文中的例子之前,你必须注意以下的问题。
大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。
第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。
所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为
7。
假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。
你可以通过@@DATEFIRST函数来检查第一天设置。
为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。
DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。
DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。
要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。
使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。
2 / 7
你必须从时间间隔这个方面来考虑。
比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。
理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。
一个月的第一天第一个例子,我将告诉你如何从当前日期去这个月的最后一天。
请注意:
这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。
每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。
这是计算一个月第一天的SQL脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)我们把这个语句分开来看看它是如何工作的。
最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。
下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01
00:
00:
0
0.000”这个日期之间的月数。
记住:
时期和时间变量和毫秒一样是从“1900-01-01 00:
3 / 7
00:
0
0.000”开始计算的。
这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。
下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。
通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。
另外,计算出来的日期的时间部分将会是“00:
00:
0
0.000”。
这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。
下一个例子也是用这个技巧从当前日期来产生不同的日期。
本周的星期一这里我是用周(wk)的时间间隔来计算哪一天是本周的星期
一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)一年的第一天现在用年(yy)的时间间隔来显示这一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)季度的第一天假如你要计算这个季度的第一天,这个例子告诉你该如何做。
4 / 7
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)当天的半夜曾经需要通过getdate()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。
假如这样,这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)深入DATEDIFF和DATEADD函数计算你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。
目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-01-01”的时间间隔上来计算出日期。
假定你修改时间间隔的数量,或者使用不同的时间间隔来调用DATEADD函数,或者减去时间间隔而不是增加,那么通过这些小的调整你可以发现和多不同的日期。
这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。
上个月的最后一天这是一个计算上个月最后一天的例子。
它通过从一个月的最后一天这个例子上减去3毫秒来获得。
有一点要记住,在Sql Server中时间是精确到3毫秒。
这就是为什么我需要减去3毫秒来获得我要的日期和时间。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:
59:
59:
997”)的时间。
5 / 7
去年的最后一天连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去3毫秒。
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))本月的最后一天现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。
修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加
1。
通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。
这是计算本月最后一天的SQL脚本。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))本年的最后一天你现在应该掌握这个的做法,这是计算本年最后一天脚本SELECT
dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
本月的第一个星期一好了,现在是最后一个例子。
这里我要计算这个月的第一个星期
一。
这是计算的脚本。
SelectDATEADD(wk,DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。
修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天,在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期
一。
6 / 7
总结我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。
通过使用这个计算日期的时间间隔的数学方法,我发现为了显示两个日期之间间隔的有用历法是有价值的。
注意,这只是计算出这些日期的一种方法。
要牢记,还有很多方法可以得到相同的计算结果。
假如你有其他的方法,那很不错,要是你没有,我希望这些例子可以给你一些启发,当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时。
---------------------------------------------------------------附录,其他日期处理方法1)去掉时分秒declare @ datetimeset @ = getdate() --'2003-7-1 10:
00:
00'SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)2)显示星期几select
datename(weekday,getdate())3)如何取得某个月的天数declare @m intset
@m=2 --月份selectdatediff(day,'2003-'+cast(@mas varchar)+'-15' ,'2003-'+cast(@m+1as varchar)+'-15')另外,取得本月天数selectdatediff(day,cast(month(GetDate())asvarchar)+'-'+cast(month(GetDate())asvarchar)+'-15',cast(month(GetDate())as varchar)+'-'+cast(month(GetDate())+1 as varchar)+'-15')或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天SELECT Day(dateadd(ms,-3,DATEADD(mm,
DATEDIFF(m,0,getdate())+1, 0)))4)判断是否闰年SELECTcaseday(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),
0)))) when 28 then '平年' else '闰年' end或者selectcasedatediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01'))when 28 then '平年'
else '闰年' end5)一个季度多少天declare @m tinyint,@time
smalldatetimeselect @m=month(getdate())select @m=case when @m
between 1 and 3 then 1when @m between 4 and 6 then
SQL使用CONVERT函数格式化日期
SQL使⽤CONVERT函数格式化⽇期
将某种数据类型的表达式显式转换为另⼀种数据类型。CAST 和 CONVERT 提供相似的功能。
CAST 语法:
CAST (expression AS data_type [ (length ) ] ) CONVERT 语法:
CONVERT (data_type [ (length ) ] ,expression [ ,style ] )
参数expression
任何有效的。data_type
⽬标数据类型。这包括 xml、bigint 和 sql_variant。不能使⽤别名数据类型。有关可⽤数据类型的详细信息,请参阅。length
指定⽬标数据类型长度的可选整数。默认值为 30。style
指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分。
返回类型
返回转换为 data_type 的 expression。
Date 和 Time 样式
如果 expression 为 date 或 time 数据类型,则 style 可以为下表中显⽰的值之⼀。其他值作为 0 进⾏处理。SQL Server 使⽤科威特算法来⽀持阿拉伯样式的⽇期格式。——————————————————————————————————————————————————————————————————————————————————
不带世纪数位 (yy)带世纪数位 (yyyy)标准输⼊/输出 (3)0 或 100 (1,2)默认mon dd yyyy hh:miAM(或 PM)1101美国mm/dd/yyyy2102ANSIyy.mm.dd3103英国/法国dd/mm/yyyy4104德国dd.mm.yy5105意⼤利dd-mm-yy6106 (1)dd mon yy7107 (1)mon dd, yy8108hh:mi:ss9 或 109 (1,2)默认设置 + 毫秒mon dd yyyy hh:mi:ss:mmmAM(或 PM)10110美国mm-dd-yy11111⽇本yy/mm/dd
SQLSERVER函数大全
SQL SERVER函数大全
SQL SERVER命令大全
SQLServer和Oracle的常用函数对比
1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual
5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from dual 2.71828182
7.取e为底的对数
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1
8.取10为底对数
S:select log10(10) value 1
O:select log(10,10) value from dual; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16
db2时间日期函数
介绍
这篇短文是为那些刚接触 DB2 并想理解如何操作日期和时间的新手而写的。使用过其它数据库的大部分人都会很惊喜地发现在 DB2 中操作日期和时间是多么简单。
基础
要使用 SQL 获得当前的日期、时间及时间戳记,请参考适当的 DB2 寄存器:
SELECT current date FROM sysibm.sysdummy1
SELECT current time FROM sysibm.sysdummy1
SELECT current timestamp FROM sysibm.sysdummy1
sysibm.sysdummy1表是一个特殊的内存中的表,用它可以发现如上面演示的 DB2 寄存器的值。您也可以使用关键字 VALUES 来对寄存器或表达式求值。例如,在 DB2 命令行处理器(Command Line
Processor,CLP)上,以下 SQL 语句揭示了类似信息:
VALUES current date
VALUES current time
VALUES current timestamp
在余下的示例中,我将只提供函数或表达式,而不再重复 SELECT ... FROM sysibm.sysdummy1或使用 VALUES 子句。
要使当前时间或当前时间戳记调整到 GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:
current time - current timezone
current timestamp - current timezone
给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp) MINUTE (current timestamp)
sql server dateadd 使用方法
一、 SQL Server的DateAdd函数介绍
SQL Server中的DateAdd函数是用来在指定的日期上添加指定的时间间隔的函数。它的语法格式为:
DateAdd(interval, number, date)
其中,interval代表时间间隔的单位,可以是year、quarter、month、day、week、hour、minute、second等;number代表要添加的时间间隔的数量;date代表要添加时间间隔的日期。
二、 DateAdd函数的使用示例
我们可以使用DateAdd函数来在当前日期上添加30天,示例代码如下:
SELECT DateAdd(day, 30, GETDATE())
以上代码会返回当天日期加上30天的结果。
三、DateAdd函数中的注意事项
在使用DateAdd函数时,有一些需要注意的地方:
1. interval参数:在使用DateAdd函数的时候,要注意interval参数的选择,要根据需要添加的时间间隔来选择合适的单位,比如添加天数就使用day,添加小时就使用hour。
2. number参数:在指定要添加的时间间隔数量时,要确保是一个整数。如果是负数,则是减去相应的时间间隔。
3. date参数:在指定要添加时间间隔的日期时,要注意日期的格式,确保是一个有效的日期值。
四、DateAdd函数的扩展用法
除了基本的日期运算,DateAdd函数还可以与其他函数和条件结合使用,来实现更复杂的日期运算需求。
我们可以使用DateAdd函数来计算两个日期之间的间隔:
SELECT DateDiff(day, '2022-01-01', '2022-01-31') AS
DateDiffResult
以上代码会返回两个日期之间的天数间隔。
另外,DateAdd函数还可以用于条件查询中,比如查找一个月内的数据:
SELECT * FROM TableName WHERE DateColumn >= DateAdd(month, -1, GETDATE())
sql datetime相减单位
sql datetime相减单位
一、以年为单位相减
在SQL中,可以使用DATEDIFF函数来计算两个日期之间相差的年数。该函数的语法为:
```
DATEDIFF(year, date1, date2)
```
其中,year表示相差的单位为年,date1和date2分别表示要相减的两个日期。函数返回的结果是一个整数,表示两个日期相差的年数。
二、以月为单位相减
类似地,可以使用DATEDIFF函数来计算两个日期之间相差的月数。该函数的语法为:
```
DATEDIFF(month, date1, date2)
```
其中,month表示相差的单位为月,date1和date2分别表示要相减的两个日期。函数返回的结果是一个整数,表示两个日期相差的月数。
三、以天为单位相减
如果想计算两个日期之间相差的天数,可以使用DATEDIFF函数,其语法为:
```
DATEDIFF(day, date1, date2)
```
其中,day表示相差的单位为天,date1和date2分别表示要相减的两个日期。函数返回的结果是一个整数,表示两个日期相差的天数。
四、以小时为单位相减
如果想计算两个日期之间相差的小时数,可以使用DATEDIFF函数,其语法为:
```
DATEDIFF(hour, date1, date2)
```
其中,hour表示相差的单位为小时,date1和date2分别表示要相减的两个日期。函数返回的结果是一个整数,表示两个日期相差的小时数。
五、以分钟为单位相减
类似地,可以使用DATEDIFF函数来计算两个日期之间相差的分钟数。该函数的语法为:
```
DATEDIFF(minute, date1, date2)
```
其中,minute表示相差的单位为分钟,date1和date2分别表示要相减的两个日期。函数返回的结果是一个整数,表示两个日期相差的分钟数。
六、以秒为单位相减
MySQL统计函数记录——按月、按季度、按日、时间段统计以及MySQL日期时间函数大全
MySQL统计函数记录——按⽉、按季度、按⽇、时间段统计以及MySQL⽇期时间函数⼤全
DAYOFWEEK(date) 返回⽇期date是星期⼏(1=星期天,2=星期⼀,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回⽇期date是星期⼏(0=星期⼀,1=星期⼆,……6= 星期天)。 mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5 mysql> select WEEKDAY('1997-11-05'); -> 2 DAYOFMONTH(date) 返回date是⼀⽉中的第⼏⽇(在1到31范围内) mysql> select DAYOFMONTH('1998-02-03'); -> 3 DAYOFYEAR(date) 返回date是⼀年中的第⼏⽇(在1到366范围内) mysql> select DAYOFYEAR('1998-02-03'); -> 34 MONTH(date) 返回date中的⽉份数值 mysql> select MONTH('1998-02-03'); -> 2 DAYNAME(date) 返回date是星期⼏(按英⽂名返回)mysql> select DAYNAME("1998-02-05"); -> 'Thursday' MONTHNAME(date) 返回date是⼏⽉(按英⽂名返回)mysql> select MONTHNAME("1998-02-05"); -> 'February' QUARTER(date) 返回date是⼀年的第⼏个季度 mysql> select QUARTER('98-04-01'); -> 2 WEEK(date,first) 返回date是⼀年的第⼏周(first默认值0,first取值1表⽰周⼀是周的开始,0从周⽇开始)mysql> select WEEK('1998-02-20'); -> 7 mysql> select WEEK('1998-02-20',0); -> 7 mysql> select WEEK('1998-02-20',1); -> 8 YEAR(date) 返回date的年份(范围在1000到9999) mysql> select YEAR('98-02-03'); -> 1998 HOUR(time) 返回time的⼩时数(范围是0到23)mysql> select HOUR('10:05:03'); -> 10 MINUTE(time) 返回time的分钟数(范围是0到59) mysql> select MINUTE('98-02-03 10:05:03'); -> 5 SECOND(time) 返回time的秒数(范围是0到59)mysql> select SECOND('10:05:03'); -> 3 PERIOD_ADD(P,N) 增加N个⽉到时期P并返回(P的格式YYMM或YYYYMM) mysql> select PERIOD_ADD(9801,2); -> 199803 PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间⽉数(P1和P2的格式YYMM或YYYYMM)mysql> select PERIOD_DIFF(9802,199703); -> 11 DATE_ADD(date,INTERVAL expr type)DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) 对⽇期时间进⾏加减法运算 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以⽤运算符 和-⽽不是函数 date是⼀个DATETIME或DATE值,expr对date进⾏加减法的⼀个表达式字符串type指明表达式expr应该如何被解释 [type值 含义 期望的expr格式]: SECOND 秒 SECONDS MINUTE 分钟 MINUTES HOUR 时间 HOURS DAY 天 DAYS MONTH ⽉ MONTHS YEAR 年 YEARS MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" HOUR_MINUTE ⼩时和分钟 "HOURS:MINUTES" DAY_HOUR 天和⼩时 "DAYS HOURS" YEAR_MONTH 年和⽉ "YEARS-MONTHS" HOUR_SECOND ⼩时, 分钟, "HOURS:MINUTES:SECONDS" DAY_MINUTE 天, ⼩时, 分钟 "DAYS HOURS:MINUTES" DAY_SECOND 天, ⼩时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS" expr中允许任何标点做分隔符,如果所有是DATE值时结果是⼀个DATE值,否则结果是⼀个DATETIME值) 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少⼩时分钟等于MINUTE_SECOND) 如果增加MONTH、YEAR_MONTH或YEAR,天数⼤于结果⽉份的最⼤天数则使⽤最⼤天数) mysql> SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND; -> 1998-01-01 00:00:00 mysql> SELECT INTERVAL 1 DAY "1997-12-31"; -> 1998-01-01 mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; -> 1997-12-31 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY); -> 1998-01-01 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02 mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); -> 20102 TO_DAYS(date) 返回⽇期date是西元0年⾄今多少天(不计算1582年以前)mysql> select TO_DAYS(950501); -> 728779 mysql> select TO_DAYS('1997-10-07'); -> 729669 FROM_DAYS(N) 给出西元0年⾄今多少天返回DATE值(不计算1582年以前)mysql> select FROM_DAYS(729669); -> '1997-10-07' DATE_FORMAT(date,format) 根据format字符串格式化date值 (在format字符串中可⽤标志符: %M ⽉名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英语前缀的⽉份的⽇期(1st, 2nd, 3rd, 等等。) %Y 年, 数字, 4 位 %y 年, 数字, 2 位 %a 缩写的星期名字(Sun……Sat) %d ⽉份中的天数, 数字(00……31) %e ⽉份中的天数, 数字(0……31) %m ⽉, 数字(01……12) %c ⽉, 数字(1……12) %b 缩写的⽉份名字(Jan……Dec) %j ⼀年中的天数(001……366) %H ⼩时(00……23) %k ⼩时(0……23) %h ⼩时(01……12) %I ⼩时(01……12) %l ⼩时(1……12) %i 分钟, 数字(00……59) %r 时间,12 ⼩时(hh:mm:ss [AP]M) %T 时间,24 ⼩时(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM %w ⼀个星期中的天数(0=Sunday ……6=Saturday ) %U 星期(0……52), 这⾥星期天是星期的第⼀天 %u 星期(0……52), 这⾥星期⼀是星期的第⼀天 %% 字符% )mysql> select DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y'); -> 'Saturday October 1997' mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s'); -> '22:23:00' mysql> select DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277' mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' TIME_FORMAT(time,format) 和DATE_FORMAT()类似,但TIME_FORMAT只处理⼩时、分钟和秒(其余符号产⽣⼀个NULL值或0)CURDATE() CURRENT_DATE() 以'YYYY-MM-DD'或YYYYMMDD格式返回当前⽇期值(根据返回值所处上下⽂是字符串或数字) mysql> select CURDATE(); -> '1997-12-15' mysql> select CURDATE() 0; -> 19971215 CURTIME() CURRENT_TIME() 以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下⽂是字符串或数字) mysql> select CURTIME(); -> '23:50:26' mysql> select CURTIME() 0; -> 235026 NOW() SYSDATE() CURRENT_TIMESTAMP() 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前⽇期时间(根据返回值所处上下⽂是字符串或数字) mysql> select NOW(); -> '1997-12-15 23:50:26' mysql> select NOW() 0; -> 19971215235026 UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 返回⼀个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)mysql> select UNIX_TIMESTAMP(); -> 882226357 mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); -> 875996580 FROM_UNIXTIME(unix_timestamp) 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下⽂是字符串或数字) mysql> select FROM_UNIXTIME(875996580); -> '1997-10-04 22:23:00' mysql> select FROM_UNIXTIME(875996580) 0; -> 19971004222300 FROM_UNIXTIME(unix_timestamp,format) 以format字符串格式返回时间戳的值mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x'); -> '1997 23rd December 03:43:30 x' SEC_TO_TIME(seconds) 以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下⽂是字符串或数字) mysql> select SEC_TO_TIME(2378); -> '00:39:38' mysql> select SEC_TO_TIME(2378) 0; -> 3938 TIME_TO_SEC(time) 返回time值有多少秒 mysql> select TIME_TO_SEC('22:23:00'); -> 80580 mysql> select TIME_TO_SEC('00:39:38'); -> 2378统计函数记录——按⽉、按季度、按⽇、时间段统计按年汇总,统计:select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y');按⽉汇总,统计: select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y-%m');按季度汇总,统计: select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3)); select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3));按⼩时: select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by date_format(col, '%Y-%m-%d %H ');查询 本年度的数据:SELECT * FROM mytable WHERE year(FROM_UNIXTIME(my_time)) = year(curdate())查询数据附带季度数:SELECT id, quarter(FROM_UNIXTIME(my_time)) FROM mytable;查询 本季度的数据:SELECT * FROM mytable WHERE quarter(FROM_UNIXTIME(my_time)) = quarter(curdate());本⽉统计:select * from mytable where month(my_time1) = month(curdate()) and year(my_time2) = year(curdate())本周统计:select * from mytable where month(my_time1) = month(curdate()) and week(my_time2) = week(curdate())N天内记录:
oraclesql日期比较:
oraclesql⽇期⽐较:
共三部分:
第⼀部分:oracle sql⽇期⽐较:
第⼆部分:Oracle 获取当前⽇期及⽇期格式
第三部分:
获取昨天:
select trunc(SYSDATE-1) from dual;
检查⼀下:
select to_char (trunc(SYSDATE-1),'yyyy-mm-dd HH24:MI:SS') from dual;
获取上个⽉第⼀天00:00:00:
select add_months(trunc(sysdate,'MON'),-1) from dual
select add_months(trunc(sysdate,'MON'),-13) from dual也可以
获取上个⽉今天00:00:00:
SELECT trunc(add_months(sysdate,-1))FROM dual
获得本季度第⼀天
SELECT TRUNC(add_months(SYSDATE,0),'Q') FROM dual
获得上季度第⼀天
SELECT TRUNC(add_months(SYSDATE,-3),'Q') FROM dual
获得去年1⽉1⽇
to_char(add_months(trunc(sysdate, 'Year'), -12), 'YYYY-MM-DD')
between and 前⾯的时间⼩后⾯的时间⼤
to_date('20110105','YYYYMMDD')-7 此处 -7代表天
第四部分:
第⼀部分:oracle sql⽇期⽐较:
oracle sql⽇期⽐较:
在今天之前:
select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
oracle最全函数大全(分析函数-聚合函数-转换函数-日期型函数-字符型函数-数值型函数-其他函数)
oracle函数大全
(分析函数,聚合函数,转换函数,日期型函数,字符型函数,数值型函数,其他函数)
oracle函数大全............................................................................................................... 1
oracle分析函数--SQL*PLUS环境 ..................................................................................... 1
oracle 10g函数大全--聚合函数 .............................................................................. 19
oracle 10g函数大全--转换函数 .............................................................................. 23
oracle 10g函数大全--日期型函数 .......................................................................... 40
oracle 10g函数大全--字符型函数 .......................................................................... 45
oracle 10g函数大全--数值型函数 .......................................................................... 55
oracle 10g函数大全--其他函数 .............................................................................. 58
Sql加减日、月、年
Sql加减⽇、⽉、年
对⽇期加减⽇、⽉、年。例如,根据员⼯CLARK的HIREDATE(聘⽤⽇期),计算另外6个不同的⽇期: 聘⽤CLARK之前及之后的5天;聘⽤CLARK之前及之后的5个⽉;聘⽤CLARK之前及之后的5年。例如,聘⽤CLARK的⽇期为“09-JUN- 1981”,要求返回如下结果集:HD_MINUS_5D HD_PLUS_5D HD_MINUS_5M HD_PLUS_5M HD_MINUS_5Y HD_PLUS_5Y
----------- ----------- ----------- ----------- ----------- -----------
04-JUN-1981 14-JUN-1981 09-JAN-1981 09-NOV-1981 09-JUN-1976 09-JUN-1986
12-NOV-1981 22-NOV-1981 17-JUN-1981 17-APR-1982 17-NOV-1976 17-NOV-1986
18-JAN-1982 28-JAN-1982 23-AUG-1981 23-JUN-1982 23-JAN-1977 23-JAN-1987
解决⽅案DB2
对⽇期值,允许进⾏标准的加、减操作,但是,如果对⽇期进⾏加减操作,后⾯⼀定要给出它所表⽰的时间单位:1 select hiredate -5 day as hd_minus_5D,
2 hiredate +5 day as hd_plus_5D,
3 hiredate -5 month as hd_minus_5M,
4 hiredate +5 month as hd_plus_5M,
5 hiredate -5 year as hd_minus_5Y,
6 hiredate +5 year as hd_plus_5Y
7 from emp
8 where deptno = 10
Oracle
对天数采⽤标准加减,⽽使⽤ADD_MONTHS 函数加减⽉数和年数:1 select hiredate-5 as hd_minus_5D,
SQL中的时间戳转换成日期计算天数差进行比较
SQL中的时间戳转换成日期计算天数差进行比较
在SQL中,时间戳是一种表示日期和时间的数据类型。它通常以整数或浮点数的形式存储,并代表从特定时间点开始的秒数。要将时间戳转换为日期,可以使用数据库的日期和时间函数。
在大多数关系型数据库系统中,如MySQL、SQL Server和Oracle,可以使用FROM_UNIXTIME函数将时间戳转换为日期。这个函数接受一个表示时间戳的整数或浮点数,并返回一个表示日期和时间的字符串。
```
FROM table_name;
```
请注意,FROM_UNIXTIME函数返回一个字符串,而不是日期数据类型。如果需要将字符串日期转换为日期数据类型,可以使用STR_TO_DATE函数。
要计算两个日期之间的天数差,可以使用DATEDIFF函数。这个函数接受两个日期参数,并返回它们之间的天数差。
假设我们有两个日期,分别为"date1"和"date2",我们可以使用以下语句计算它们之间的天数差:
```
SELECT DATEDIFF(date2, date1) AS day_diff
FROM table_name;
``` 如果day_diff大于0,则表示date2比date1晚几天;如果day_diff小于0,则表示date2比date1早几天;如果day_diff等于0,则表示两个日期相同。
为了进行比较,我们可以使用WHERE子句将日期转换为时间戳,并使用返回的整数值进行比较。
```
SELECT*
FROM table_name
```
请注意,UNIX_TIMESTAMP函数返回一个整数,表示从1970年1月1日以来的秒数。因此,如果要正确比较日期,请确保将日期转换为时间戳。
总结起来,要在SQL中将时间戳转换为日期并计算天数差,我们可以使用FROM_UNIXTIME函数将时间戳转换为日期字符串,使用STR_TO_DATE函数将日期字符串转换为日期数据类型,使用DATEDIFF函数计算日期之间的天数差,使用UNIX_TIMESTAMP函数将日期转换为时间戳,并使用WHERE子句进行比较。这些函数和子句在不同的数据库系统中可能会有所不同,请根据所使用的数据库系统的文档进行参考。
