SELECT *, ABS(NOW() - startTime)  AS diffTime
FROM PolicyShuPrice
ORDER BY diffTime ASC
LIMIT 0, 1

mysql优化改进版本

-- 当前时刻,向上找一条
SELECT * 
FROM policyshuprice
WHERE startTime > NOW()
LIMIT 1
-- 当前时刻,向下找一条
SELECT * 
FROM policyshuprice
WHERE startTime < NOW()
LIMIT 1
-- 优化的结果
EXPLAIN
SELECT * FROM 
	SELECT * FROM 
		SELECT id, ABS(NOW() - startTime)  AS diffTime
		FROM policyshuprice
		WHERE startTime < NOW()
		LIMIT 1
	UNION
	SELECT * FROM 
		SELECT id, ABS(NOW() - startTime)  AS diffTime
		FROM policyshuprice
		WHERE startTime > NOW()
		LIMIT 1	
ORDER BY diffTime ASC
LIMIT 1

oracle写法

SELECT * FROM (
	SELECT *, ABS(NOW() - startTime) AS diffTime
	FROM PolicyShuPrice
	ORDER BY diffTime ASC 
) C WHERE rownum=1

附带表结构

DROP TABLE IF EXISTS `policyshuprice`; CREATE TABLE `policyshuprice` ( `id` int(11) NOT NULL AUTO_INCREMENT, `policySku_id` int(11) DEFAULT NULL, `startTime` datetime DEFAULT NULL, `price` decimal(10,4) DEFAULT NULL, `postFee` decimal(10,4) DEFAULT NULL, `remarks` varchar(200) DEFAULT NULL, `needConfirm` tinyint(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Data for the table `policyshuprice` */ insert into `policyshuprice`(`id`,`policySku_id`,`startTime`,`price`,`postFee`,`remarks`,`needConfirm`) values (1,1,'2017-08-12 08:30:46','2.5000','1.0000','1',1),(2,2,'2017-08-12 08:50:46','3.5000','1.0000','1',1),(3,3,'2017-08-12 09:30:46','4.6000','1.0000','1',1); /*Table structure for table `policysku` */ DROP TABLE IF EXISTS `policysku`; CREATE TABLE `policysku` ( `id` int(11) NOT NULL AUTO_INCREMENT, `PolicyType` varchar(200) DEFAULT NULL, `Sku_id` int(11) DEFAULT NULL, `shop_id` int(11) DEFAULT NULL, `state` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Data for the table `policysku` */ insert into `policysku`(`id`,`PolicyType`,`Sku_id`,`shop_id`,`state`) values (1,'1',1,3,1),(2,'2',2,3,1),(3,'2',3,2,1); # mysql写法SELECT *, ABS(NOW() - startTime) AS diffTimeFROM PolicyShuPriceORDER BY diffTime ASCLIMIT 0, 1# oracle写法SELECT * FROM ( SELECT *, ABS(NOW() - startTime) AS diffTime FROM PolicySh
所以以 代码如下:create_time datetime default now() 的形式设置默认值是不可能的。 代替的方案是使用TIMESTAMP类型代替DATETIME类型。 CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段不会变。 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段将会变。即时间变为了更新时候的时间。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更
expr指的是时间的间隔数量,通常是规定的时间表达式。 unit 指的是时间间隔的单位,比如年月日等等 注意:建议将expr传入为字符串,谨慎传入数字。例如’6/4’是6个小时4分钟,而6/4是1个小时5000分钟。如果实际需求中需要传入数值,建议用cast将6/4进行转化。例如 INTERVAL CAST(6/4 AS DECIMAL(2,1))。 关于表达式中所有的unit和exper格式,如下图: 所以我们的表达式就可以
时间最近一条记录,是一个很常见的需求,这里提供两种方法,sql比较简单,容易理解和使用。 1、使用concat拼接函数 使用concat将主键或表中的唯一字段与时间拼接起来: select concat(u1.user_no,max(u1.sync_date)) from rlzy_user u1 group by u1.user_no 上面的sql查询到每个用户时间最大的一条记录; 这样就可以根据上面查询出的结果查询所有字段了; select * from rlzy_user u where c
比如有一张表,表名叫weixin_**:现在需要获create_time距离现在最近的那些数据。 比如表里的create_time值有2014-10-11、2013-02-10、2015-09-18、2016-03-04 现在需要把距离现在最新日期的那些日期(例子中是2016-03-04)查出来。 说白了,就是查找最新的记录,就拿上面的例子来说,其实会有很
MySQL 中,如果你想要将当前时间插入到表中的某个字段中,可以使用 NOW() 函数或者 CURRENT_TIMESTAMP 函数来获当前时间。例如,假设我们有一个名为 `orders` 的表,其中包含 `order_date` 和 `order_id` 两个字段,我们可以使用以下语句向表中插入一条记录,并将当前时间插入到 `order_date` 字段中: INSERT INTO orders (order_date, order_id) VALUES (NOW(), 1001); 这样就将当前时间插入到了 `order_date` 字段中,同时插入了订单编号 `1001`。如果你想要指定一个特定的日期时间,可以使用类似于 `2022-01-01 12:00:00` 的日期时间字符串来替换 NOW() 函数。
总结3句: 1、DECLARE tail_flag INT DEFAULT -1; 2、DECLARE CONTINUE HANDLER FOR NOT FOUND SET tail_flag=1; 3、IF tail_flag = 1 THEN LEAVE data_loop; END IF; 2021-07-03--非常好的在线格式化java代码的工具 技术小白白~: 亲测好用哈哈,感谢大佬分享,平时不会的可以请教您吗? (java)预约日期+时间 小猪皮特: 你这个心里话是啥情况