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() 函数。
2021-07-03--非常好的在线格式化java代码的工具
技术小白白~:
(java)预约日期+时间
小猪皮特: