在项目开发中,对SQL的查询经常会涉及到日期的计算上,今天就来简单归纳一下相关日期操作,主要分为MySQL和MSSQL的,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');
如果大家有补充的可以说下,我再继续添加;
分享到:
相关推荐
在SQL Server中对时间日期的操作是数据库管理与开发过程中不可或缺的一部分。这不仅涉及到对当前时间的获取、格式化,还包括了日期的计算和调整。以下将深入解析如何在SQL Server中进行时间日期的操作。 ### 一、...
SQL日期操作 SQL日期操作日期推算处理
### SQL数据库中对日期时间格式的简单操作 在SQL数据库中,处理日期和时间是非常常见的需求之一。无论是记录数据的时间戳、分析业务流程中的时间差异还是进行其他与时间相关的操作,掌握日期时间格式的基本操作都是...
在SQL Server中,日期和时间数据类型的处理是数据库操作中的常见任务。无论是为了报表、数据分析还是用户界面展示,我们经常需要将日期格式进行转换。本文将深入探讨SQL Server中多种日期格式转换的方法。 1. `...
总的来说,SQL中将日期转换为中文大写涉及到对日期的理解、字符串操作和可能的自定义函数或存储过程开发。无论选择哪种方法,都需要对SQL有深入的理解,并熟悉所使用的数据库系统。在实践中,我们应根据项目需求、...
SQL Server提供了多种日期和时间数据类型,包括`date`、`datetime`、`datetime2`、`smalldatetime`等,用于存储和操作日期和时间数据。但在某些场景下,如报表生成、日志记录或与不支持这些数据类型的外部系统交互时...
在SQL中,日期和时间处理是数据库操作中的常见需求,特别是在数据分析、报表生成以及日志管理等场景下。本文将详细介绍SQL中日期处理的常用方法,包括获取当前系统时间、日期加减运算、计算日期差、提取日期部分、...
SQL server对日期时间的格式,大小比较,差值等等 。很全面的对时间一系列操作。
通过以上四种方法,我们可以有效地在SQL Server中处理日期相关的查询问题。每种方法都有其适用场景和局限性,开发者可以根据实际需求选择最合适的方式来实现日期过滤的功能。此外,随着SQL Server版本的不断更新,还...
以下是对SQL日期处理函数的全面解析,这些函数包括获取当前系统时间、修改日期时间值、计算日期时间间隔、提取日期时间的部分值以及验证和转换日期时间值。 ### 1. 获取当前系统时间 - **GETDATE()**:返回服务器...
这通常涉及到对特定日期范围内的数据进行聚合,如计算每个日期的用户数、销售额等。可以使用`GROUP BY`语句配合日期列和统计函数,如`COUNT`、`SUM`、`AVG`等,来达到统计目的。 例如,如果我们要统计每个日期的...
在数据库操作中,经常需要根据日期进行数据筛选。本文档将详细介绍如何使用SQL语句来查询特定日期的数据,特别是使用`DATEDIFF`函数来精确地查询一天内或者一周内的数据。 #### 二、`DATEDIFF`函数详解 `DATEDIFF`...
下面将对 SQL Server 中日期相关知识进行详细介绍。 一、获取当前日期时间 在 SQL Server 中,可以使用 GETDATE() 函数来获取当前日期时间。GETDATE() 函数返回当前系统日期和时间。 示例: ```sql SELECT ...
为了帮助用户高效地管理这些数据类型,SQL Server提供了丰富的日期时间函数,使得开发人员能够轻松地执行诸如提取日期部分、计算日期间隔、格式化日期输出等操作。本文将详细介绍几个常用的SQL Server日期时间函数,...
在SQL中,日期操作是数据库查询中不可或缺的部分。本文主要探讨了如何在SQL中处理日期,包括获取当前日期、计算日期间隔以及提取日期的特定部分。以下是一些关键的SQL日期函数及其用法: 1. **当前系统日期和时间**...
### SQL日期函数大全:深入解析与实用技巧 在SQL中,日期函数是处理时间数据的强大工具,它们能够帮助我们执行日期的加减、比较、格式化等操作,从而在数据分析和报告生成中发挥关键作用。本文将围绕标题“SQL日期...
在SQL中,对日期时间数据进行格式化处理是一项非常常见的需求。例如,可能需要将日期从YYYY-MM-DD格式转换为DD/MM/YYYY,或将时间从HH:MM:SS转换为HHMMSS等。这对于报告、数据分析或是与不同系统之间的数据交换都是...
在SQL Server中进行日期计算是数据库操作中常见的需求之一。本文将深入探讨SQL Server中处理日期的各种方法,并通过具体的示例来展示这些方法的实际应用。 #### 1. DATEADD 和 DATEDIFF 函数 在SQL Server中,`...
### SQL日期函数应用集锦 在SQL Server数据库中,日期函数是进行日期处理与计算的重要工具之一。本文将详细介绍SQL Server中的几个常用日期函数及其应用场景,帮助开发者更好地理解和使用这些函数来解决实际问题。 ...