mysql timespan_在MySQL中计算Timespan

此查询将显示2011年2月1日午夜的确切天数,小时数,分钟数和秒数:

SELECT

TRIM(REPLACE(CONCAT(

IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days '))),

IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs '))),

IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins '))),

IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' '))

TimeDisplay

FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc

FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa

FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa

FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa

FROM (SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP('2011-02-01 00:00:00')) sec_a)

A) AA) AAA) AAAA) B;只需将'2011-02-01 00:00:00'替换为您想要的任何日期时间值或表列名称即可。

试一试 !!!

更新2011-10-06 13:38美国东部时间

我写了一个你可以调用的存储函数,它将为你处理:

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`GetTimeDisplay` $$

CREATE FUNCTION `test`.`GetTimeDisplay` (GivenTimestamp TIMESTAMP)

RETURNS VARCHAR(32)

DETERMINISTIC

BEGIN

DECLARE rv VARCHAR(32);

DECLARE diff BIGINT;

SET diff = UNIX_TIMESTAMP() - UNIX_TIMESTAMP(GivenTimestamp);

SELECT

TRIM(REPLACE(CONCAT(

IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days '))),

IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs '))),

IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins '))),

IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' '))

INTO rv

FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc

FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa

FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa

FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa

FROM (SELECT ABS(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(GivenTimestamp)) sec_a)

A) AA) AAA) AAAA) B;

IF diff = 0 THEN

SET rv = '0 secs';

END IF;

IF diff < 0 THEN

SET rv = CONCAT(rv,' From Now');

END IF;

IF diff > 0 THEN

SET rv = CONCAT(rv,' Ago');

END IF;

RETURN rv;

END $$

DELIMITER ;您可以像这样重写查询:

$query = "select country, rprice as regPrice, mprice as midPrice, pprice as prePrice, saddress as streetAddress,

_id as ID, lat, lng, sname as Name, logo, admin_level_1 as state, locale as city, test.GetTimeDisplay(rdate) as regDate,

test.GetTimeDisplay(mdate) as midDate, test.GetTimeDisplay(pdate) as preDate,

format((acos(sin(radians($lat1)) * sin(radians(lat)) + cos(radians($lat1)) *

cos(radians(lat)) * cos(radians($lng1) - radians(lng))) * 6378),1) as distance from stationDetails where

(acos(sin(radians($lat1)) * sin(radians(lat)) + cos(radians($lat1)) * cos(radians(lat)) *

cos(radians($lng1) - radians(lng))) * 6378) <= $rad order by $sort asc, $type asc";您可能希望将存储的函数移动到另一个数据库。我的代码将存储的函数放在测试数据库中。

试一试 !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值