Where条件中的if(){}else{}

 

活动开始时间和结束时间start_time、end_time为时间戳

查询正在进行中的活动,当前时间>=开始时间 并且 当前时间<结束时间(其中start_time为必填项,end_time非必填项,当end_time未设置则默认结束时间为开始时间的第二天凌晨

MySQL

-- 方法一
SELECT
	* 
FROM
	activity 
WHERE
	1 = 1 
	AND UNIX_TIMESTAMP( ) >= start_time
AND
IF
	(
	end_time != 0,
	UNIX_TIMESTAMP( ) < end_time,
	UNIX_TIMESTAMP( ) < UNIX_TIMESTAMP( DATE_ADD( str_to_date( DATE_FORMAT( FROM_UNIXTIME( start_time ), '%Y-%m-%d' ), '%Y-%m-%d %H:%i:%s' ), INTERVAL 1 DAY ) ) 
	);

-- 方法二
SELECT
	* 
FROM
	activity 
WHERE
	1 = 1 
	AND UNIX_TIMESTAMP( ) >= start_time 
	AND (
	( end_time != 0 AND UNIX_TIMESTAMP( ) < end_time ) 
	OR (
	end_time = 0 
	AND UNIX_TIMESTAMP( ) < UNIX_TIMESTAMP( DATE_ADD( str_to_date( DATE_FORMAT( FROM_UNIXTIME( start_time ), '%Y-%m-%d' ), '%Y-%m-%d %H:%i:%s' ), INTERVAL 1 DAY ) ) 
	) 
	);

 

Oracle

-- 方法一
SELECT
	* 
FROM
	activity,
	( SELECT Trunc ( ( SYSDATE - TO_DATE ( '1970-01-01 8', 'YYYY-MM-DDHH24' ) ) * ( 60 * 60 * 24 ) ) nowTime FROM DUAL ) t 
WHERE
	1 = 1 
	AND t.nowTime >= start_time 
	AND (
	( end_time != 0 AND t.nowTime < end_time ) 
	OR (
	end_time = 0 
	AND t.nowTime < (
	Trunc ( ( start_time / ( 60 * 60 * 24 ) + TO_DATE ( '1970-01-01 8', 'YYYY-MM-DDHH24' ) ) + 1 ) - TO_DATE ( '1970-01-01 8', 'YYYY-MM-DD HH24' ) 
	) * ( 60 * 60 * 24 ) 
	) 
	);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值