`

SQL对日期相关操作

    博客分类:
  • SQL
阅读更多

 

在项目开发中,对SQL的查询经常会涉及到日期的计算上,今天就来简单归纳一下相关日期操作,主要分为MySQLMSSQL的,Oracle在项目中暂时还没真正使用,所以暂时先不归纳,等用到时再根据实际项目开发情况进行归纳;

MSSQL

1、 求相差天数

select datediff(day,'2012-01-01',getdate()) as '相差天数';  --8

 

2、求本年的第一天

SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0) as '本年第一天';-- 2012-01-01 00:00:00.000

 

declare @dt datetime
set @dt=GETDATE()
select CONVERT(char(5),@dt,120)+'1-1' as '本年的第一天';--2012-1-1

 

 3、求本年的最后一天

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0)) as '本年最后一天';--2012-12-31 23:59:59.997

 

 

declare @dt datetime
set @dt=GETDATE()
SELECT CONVERT(char(5),@dt,120)+'12-31' as '本年的最后一天';-- 2012-12-31

 

 4、去年的最后一天

 

SELECT	dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()), 0)) as '去年的最后一天';--2011-12-31 23:59:59.997

 

 5、求本季度第一天

SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0) as '本季度第一天';-- 2012-01-01 00:00:00.000

 

 

declare @dt datetime
set @dt=GETDATE()
SELECT 
CONVERT(datetime,CONVERT(char(8),DATEADD(Month,DATEPART(Quarter,@dt)*3-Month(@dt)-2,@dt),120)+'1') as '本季度的第一天';--2012-01-01 00:00:00.000

 

6、求本季度最后一天

declare @dt datetime
set @dt=GETDATE()
SELECT CONVERT(datetime,
    CONVERT(char(8),
        DATEADD(Month,
            DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)
    +CASE WHEN DATEPART(Quarter,@dt) in(1,4)
        THEN '31'ELSE '30' END) as '本季度最后一天';--2012-03-31 00:00:00.000

 

 

declare @dt datetime
set @dt=getdate()
SELECT DATEADD(Day,-1,
    CONVERT(char(8),
        DATEADD(Month,
            1+DATEPART(Quarter,@dt)*3-Month(@dt),
            @dt),
        120)+'1') as '本季度最后一天';--2012-03-31 00:00:00.000

 

 7、求本月第一天:

SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0) as '本月第一天';--2012-01-01 00:00:00.000

 

declare @dt datetime
set @dt=getdate()
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1') as '本月第一天';--2012-01-01 00:00:00.000

 

8、求本月最后一天:

SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) as '本月最后一天';--2012-01-31 23:59:59.997

 

 

declare @dt datetime
set @dt=GETDATE()
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1') as '本月最后一天';--2012-01-31 00:00:00.000

 

declare @dt datetime
set @dt=GETDATE()
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt)) as '本月最后一天';--2012-01-31 10:18:32.753

 

 9、上个月最后一天

SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)) as '上个月的最后一天';--2011-12-31 23:59:59.997

 

10、本月的第一个星期一

select DATEADD(wk,   
DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0) as '本月的第一个星期一';--2012-01-02 00:00:00.000

 

11、本周的星期一

SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0) as '本周的星期一';--2012-01-09 00:00:00.000
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),1) as '本周的星期二';--2012-01-10 00:00:00.000

 

12、当天的半夜

SELECT DATEADD(dd,DATEDIFF(dd,0,getdate()), 0) as '当天的半夜';--2012-01-09 00:00:00.000

 

13、查询本周记录

select * from tableName where DATEPART(wk, theDate) = DATEPART
(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE());

 

14、查询本季度记录

select * from tableName where DATEPART(qq, theDate) = DATEPART
(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

 

15、获取当月总天数

select DATEDIFF(dd,getdate(),DATEADD
(mm, 1, getdate()))

 

 

select datediff(day,
dateadd(mm, datediff(mm,'',getdate()), ''),
dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))

 

 16、获取当前为星期几

select DATEPART(dw, GETDATE())--2,星期日为1

 这里简单对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

millisecond

ms

 

 

 

MySQL

 

-- 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 
SELECT DAYOFWEEK(NOW()); -- 2

-- 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。 
SELECT WEEKDAY(NOW()); -- 0

-- 返回date的月份中日期,在1到31范围内。 
SELECT DAYOFMONTH(NOW()); -- 9 

-- 返回date在一年中的日数, 在1到366范围内
SELECT DAYOFYEAR(NOW()); -- 9 

-- 返回date的月份,范围1到12。 
SELECT MONTH(NOW());  -- 1

-- 返回date的星期名字。 
SELECT DAYNAME(NOW()); -- Monday

-- 返回date的月份名字。 
SELECT MONTHNAME(NOW()); -- January

-- 返回date一年中的季度,范围1到4
 SELECT QUARTER(NOW()); -- 1

-- 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许 你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。 
SELECT WEEK(NOW()); -- 2
SELECT WEEK(NOW(),0); -- 2
SELECT WEEK(NOW(),1); -- 2


-- 返回date的年份,范围在1000到9999。 
SELECT YEAR(NOW());-- 2012

-- 返回time的小时,范围是0到23。 
SELECT HOUR(NOW()); -- 11

-- 返回time的分钟,范围是0到59。 
SELECT MINUTE(NOW()); -- 2
-- SECOND



-- MySQL 为日期增加一个时间间隔:date_add()
SET @dt = NOW();
SELECT DATE_ADD(@dt, INTERVAL 1 DAY);   -- 加1天
SELECT DATE_ADD(@dt, INTERVAL 1 HOUR);   -- 加1小时
SELECT DATE_ADD(@dt, INTERVAL 1 MINUTE);    -- 加1分钟
SELECT DATE_ADD(@dt, INTERVAL 1 SECOND); -- 加1秒
SELECT DATE_ADD(@dt, INTERVAL 1 MICROSECOND);-- 加1毫秒
SELECT DATE_ADD(@dt, INTERVAL 1 WEEK);-- 加1周
SELECT DATE_ADD(@dt, INTERVAL 1 MONTH);-- 加1月
SELECT DATE_ADD(@dt, INTERVAL 1 QUARTER);-- 加1季
SELECT DATE_ADD(@dt, INTERVAL 1 YEAR);-- 加1年

SELECT DATE_ADD(@dt, INTERVAL '01:15:30' HOUR_SECOND);-- 加上1小时15分30秒  
SELECT DATE_ADD(@dt, INTERVAL '1 01:15:30' DAY_SECOND);-- 加1天 1小时15分30秒

-- MySQL 为日期减去一个时间间隔:date_sub()
SELECT DATE_SUB('1998-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND); -- 1997-12-30 22:58:59

-- MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。MySQL period_add(P,N):日期加/减去N月。
SELECT PERIOD_ADD(200808,2), PERIOD_ADD(20080808,-2)  --   200810 20080806 
SELECT PERIOD_DIFF(200808, 200801);  -- 7

-- datediff(date1,date2):两个日期相减 date1 date2,返回天数 
SELECT DATEDIFF('2008-08-08', '2008-08-01'); -- 7  
SELECT DATEDIFF('2008-08-01', '2008-08-08'); -- -7  

--  timediff(time1,time2):两个日期相减 time1 time2,返回 time 差值。  
SELECT TIMEDIFF('2008-08-08 08:08:08', '2008-08-08 00:00:00');-- 08:08:08  
SELECT TIMEDIFF('08:08:08', '00:00:00'); -- 08:08:08  


SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');  

 

 

如果大家有补充的可以说下,我再继续添加;

 

2
0
分享到:
评论

相关推荐

    sqlserver中对时间日期的操作

    sqlserver中对时间日期的操作 学习必不可少的。

    SQL日期操作日期推算处理

    SQL日期操作 SQL日期操作日期推算处理

    SQL数据库中对日期时间格式的简单操作

    SQL数据库中对日期时间格式的简单操作.txt

    Sql Server日期格式转换

    Sql Server日期格式转换是我们在使用Sql Server数据库时经常用到的操作,下面就将为您举一个Sql Server日期格式转换的例子,供您参考,希望对您学习Sql Server日期格式转换有所帮助。

    【经典】SQL server 日期时间操作大全

    SQL server对日期时间的格式,大小比较,差值等等 。很全面的对时间一系列操作。

    SQLServer时间类型日期类型.pdf

    在SQL Server 2005中使用日期/时间值有时候会很模糊、会觉得很迷茫。因为日期/时间数据类 型同时存储日期和时间值,而这些值的操作并不总是一个简单的过程,或者看起来不简单的。

    sql中时间日期操作(时间日期函数,时间日期格式,时间日期转换参数,时间日期比较,时间日期计算)

    这是我收集的关于数据库中时间格式的一些转换及设置,其中还有时间日期的相关操作,适合有需要的朋友参考

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

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

    易语言SQL全面操作数据库

    易语言SQL全面操作数据库源码,SQL全面操作数据库,查询数据,日期转换,取汉字拼音码,返回字节集文本

    SQL格式化日期的方法

    全面介绍了sql操作数据库的格式化日期的方法,

    SQL Server 2000下日期操作的实用范例

    本文是SQL Server 2000下日期操作的实用范例。

    SQL 高级查询技术

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

    pl/sql操作手册

    pl/sql 7.1操作手册,中文,总共239页 目录 目录..............................................................................................................................................................

    SQL 经典实例

    另外,本书还介绍了如何使用 SQL语句进行日期处理,以及一些其他的 SQL 语句查询操作,能够帮助你掌握相关的 SQL 知识。本书涵盖了150多个SQL的常见问题及其解决方案。 本书适用于 SQL 开发人员、非 SQL 程序员和 ...

    SQL详细自学资料、内有各类例题、语句详解

    函数对数据的进一步处理 汇总函数 日期/时间函数 SQL 中的子句 创建和操作表 从外部数据源中导入和导出数据 插入语句 数据操作语句 创建视图和索引 事务处理控制 数据库安全 高级 SQL 动态使用SQL SQL 语句优化以...

    达梦数据库SQL操作手册

    第1章结构化查询语言DM_SQL简介 1.1 DM_SQL语言的特点 ...1.4.3 日期时间数据类型 1.4.4 多媒体数据类型 1.5 DM_SQL语言支持的表达式 1.5.1 数值表达式 1.5.2 字符串表达式 1.5.3 时间值表达式 1.5.4 时间间隔值表达式

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

    1.2.4 SQL Server 2008的数据操作/7 1.3 SQL Server 2008的安装/9 1.3.1 SQL Server 2008的版本选择/9 1.3.2 SQL Server 2008的安装环境/11 1.3.3 安装配置SQL Server 2008/11 1.4 使用SQL Server Management Studio...

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

    第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 ...18.1.3 sql中与事务有关的语句 374 18.2 事务控制的具体实现 376 18.2.1 开始事务 376 18.2.2 set ...

    《SQL HACKS》

    ● 优化SQL操作,使CPU和网络的负载最小化。 即使你使用Access、MySQL、SQL Server、Oracle或PostgreSQL数据库多年,本书保证你从没有像这样使用SELECT、INSERT、UPDATE和DELETE语句。 Andrew Cumming是...

    GBase 8a SQL参考手册

    二进制数据类型、日期和时间类型,并对数据类型存储需求、如何选择数据类 型进行了描述。 第二章详细介绍了 SQL 语言基础知识,包括数值,数据库、表、列和别名, 如何设置和使用用户变量、系统变量和注释语法。 第...

Global site tag (gtag.js) - Google Analytics