SQL 日期函数如何获取月份最后一天?

说实话,这事儿吧,得看用在哪个数据库上。
用SQLServer的话,直接用EOMONTH就行,简单明了。
比如你要2 02 4 年3 月3 1 号那天,直接EOMONTH('2 02 4 -03 -1 5 '),它就给你返回2 02 4 -03 -3 1 你要再偏移个俩月,比如要2 02 4 年5 月3 1 号,那EOMONTH('2 02 4 -03 -1 5 ', 2 ),嘿,直接给你2 02 4 -05 -3 1
MySQL和Oracle这俩货,它们有LAST_DAY函数,用法也类似。
比如LAST_DAY('2 02 4 -03 -1 5 '),也是直接返回2 02 4 -03 -3 1 你要是想知道现在这个月最后一天是哪天,还能用LAST_DAY(NOW()),它就给你当前月的最后一天。

PostgreSQL这货啊,它没有现成的LAST_DAY函数,得自己动手丰衣足食。
你可以先把日期往前进一个月,再减去一天。
比如DATE_TRUNC('month', '2 02 4 -03 -1 5 ') + INTERVAL '1 month'
INTERVAL '1 day',这么一算,也是2 02 4 -03 -3 1 还有个更简单的写法,也是把日期加一个月,再减去那一天的天数再减一天,也能得到2 02 4 -03 -3 1
你要是还想写个通用的,能跑各种数据库的,那你可以这么写:先把日期按月往前推一个月,再减去一天。
比如DATE_ADD(DATE_TRUNC('month', date), INTERVAL '1 month')
INTERVAL '1 day'。
不过这得根据你用的数据库,把里面的函数换一下,比如PostgreSQL用DATE_TRUNC,MySQL用DATE_FORMAT。

实际用起来吧,比如你要查订单表里每个订单的日期是哪个月的最后一天,你就可以这么写。
MySQL的就是SELECT order_date, LAST_DAY(order_date) AS month_end FROM orders。
SQLServer的就是SELECT order_date, EOMONTH(order_date) AS month_end FROM orders。
PostgreSQL的就是SELECT order_date, (DATE_TRUNC('month', order_date::date) + INTERVAL '1 month'
INTERVAL '1 day')::date AS month_end FROM orders。

总之呢,专用函数用起来方便,通用方案移植性强。
输入的日期可以是固定的,也可以是表里的列,或者是动态的,比如NOW()、CURRENT_DATE。

oracle sql 时间范围查询

说实话,用OracleSQL查时间范围,得用系统日期函数和时间间隔。
比如sysdate,这玩意儿直接取现在的时间点。
你看啊,打个比方,你想看现在具体几点几分,就写 select to_char(sysdate, 'YYYY-MM-DD HH2 4 :MI:SS') from dual; 这样就能看到系统时间了。

你要查昨天到今天的数据,咋办?用 BETWEEN 操作符就行。
比如查用户表 users,时间字段叫 log_time,就写 SELECT FROM users WHERE log_time BETWEEN sysdate-1 AND sysdate; 这样就取到昨天到今天的数据了。

要是想查最近一小时,咋整?时间间隔得换算。
一小时是2 4 分之一天,所以写 SELECT FROM users WHERE log_time BETWEEN sysdate-1 /2 4 AND sysdate; 这样就取到一小时内的数据了。

一分钟咋查?更小了。
一分钟是2 4 6 0分之一天,所以 SELECT FROM users WHERE log_time BETWEEN sysdate-1 /(2 4 6 0) AND sysdate; 这样就取到一分钟内的数据了。

再比如查最近一个月,可以用 ADD_MONTHS 函数。
写 SELECT FROM users WHERE log_time BETWEEN add_months(sysdate, -1 ) AND sysdate; 这样就取到上个月到现在的数据了。

你要是具体查最近7 分钟,可以这么写 SELECT to_char(sysdate, 'YYYY-MM-DD HH2 4 :MI:SS'), to_char(sysdate
interval '7 ' minute, 'YYYY-MM-DD HH2 4 :MI:SS') FROM dual; 这样能看到现在时间和7 分钟前的时间,就知道7 分钟范围内的数据范围了。

就这么回事,时间函数用起来,时间间隔调整下,数据就出来了。

sql中日期增加天数的查询操作

哎,对,那个 DATEADD,挺实用的。

就是那个,比如啊,你要是在 SQLServer 里头,想搞个日期加天数,咋弄?
DATEADD(day,1 0,'2 02 2 -01 -01 '),你看,加1 0天,就这个。

datepart 就是 day 啊,month 啊,那个啥。
number 就是加多少,1 0
date 就是原来那个日期,'2 02 2 -01 -01 ' 这样。

你要是想知道现在啥时候,可以用 GETDATE()。

DATEADD(day,1 0,GETDATE()),这样子,就知道了,是今天往后1 0天。

你要是对着表操作,比如有个表,叫 Orders,有个字段叫 OrderDate。

你想把所有订单日期都往后加1 0天,就写:
SELECT DATEADD(day,1 0,OrderDate) FROM Orders。

就这么简单。

你要是加月份,就 month,加年份,就 year。

DATEADD(month,1 ,'2 02 2 -01 -01 '),加1 个月。

DATEADD(year,1 ,'2 02 2 -01 -01 '),加1 年。

就这样。

不过要注意,number 是负数的话,就是减。

DATEADD(day,-5 ,'2 02 2 -01 -01 '),就是减5 天。

对,就是这样的。