【LightDB】 时间和字符串比较-MySQL兼容

mysql 日期类型

类型取值范围描述
datetime‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’带时间点,无时区概念,默认显示格式YYYY-MM-DD hh:mm:ss
timestamp‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC带时区,存储utc时区,显示当前时区时间,带毫秒
date‘1000-01-01’ to ‘9999-12-31’无时区,只存日期(不带时间点)

与字符比较

mysql中,时间和字符串比较是,会将字符转换成对应的类型进行比较。

create table test(id int, uptime datetime);
insert into test values(1,now());
select now() > concat('2014-01-02',' 00:00:00'); 
-- 等价于以下sql
select now() > cast(concat('2014-01-02',' 00:00:00') as datetime);

兼容MySQL

LightDB只有常量字符串(unknow类型)支持直接和日期比较。当字符串类型是text,varchar(n),char(n)时,不支持此行为。为方便用户迁移,23.4版本支持日期类型和数值类型的比较。

lightdb@mysql=# create table test(id int, uptime datetime);
CREATE TABLE
lightdb@mysql=# insert into test values(1,now());
INSERT 0 1
lightdb@mysql=# select now() > concat('2014-01-02',' 00:00:00'); 
 ?column? 
----------
 t
(1 row)

create table t1(co1 text, co2 varchar);
insert into t1 values('2023-10-12 21:40:00', '2023-10-12 21:40:00');
select * from t1 where now() > co1;
         co1         |         co2         
---------------------+---------------------
 2023-10-12 21:40:00 | 2023-10-12 21:40:00
(1 row)

select * from t1 where now()::timestamp with time zone > co1;
         co1         |         co2         
---------------------+---------------------
 2023-10-12 21:40:00 | 2023-10-12 21:40:00
(1 row)

select * from t1 where now()::date > co1;
         co1         |         co2         
---------------------+---------------------
 2023-10-12 21:40:00 | 2023-10-12 21:40:00
(1 row)

SELECT   
    case co1 
        WHEN (now() < '2020-01-01')::text THEN 'update'  
        ELSE 'insert'  
    END AS res  
FROM t1;
  res   
--------
 insert
(1 row)

SELECT   
    case co1 
        WHEN (now() < co2)::text THEN 'update'  
        ELSE 'insert'  
    END AS res  
FROM t1;
  res   
--------
 insert
(1 row)

SELECT   
    case co1 
        WHEN (now()::timestamp with time zone < co2)::text THEN 'update'  
        ELSE 'insert'  
    END AS res  
FROM t1;
  res   
--------
 insert
(1 row)

SELECT   
    case co1 
        WHEN (now()::date < co2)::text THEN 'update'  
        ELSE 'insert'  
    END AS res  
FROM t1;
  res   
--------
 insert
(1 row)

drop table t1;

此外,date,time,timestamp,timestamp都支持和字符串比较。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值