1. to_char 和 to_date 是oracle 和 DM 原生支持的日期函数
如下 YYYY-MM-DD HH24:MI:SS 纯大写纯小写都行
推荐使用 TO_CHAR 函数来格式化日期(而不推荐 DATE_FORMAT)
SELECT to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;SELECT to_char(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM dual;-6118: 非法的时间日期类型数据 to-date使用需要注意 格式必须一致, 该函数是转为date类型SELECT to_date('2019-10-22 20:47:00','YYYY-MM-DD HH24:MI:SS') FROM dual;
SELECT to_date('2019-10-22 20:47:00','yyyy-mm-dd hh24:mi:ss') FROM dual;
to_char 用在select 语句 表名的前面, to_date用在where后, 对入参日期转date
关于数据库时间是 年月日时分秒, 用startDate endDate范围查询传入的是 年月日, 你可以将数据库的格式化为 年月日, 这样用 >= <=就可以了
推荐使用 TO_CHAR 函数来格式化日期,因为它是达梦数据库原生支持的函数,能够更好地与数据库集成,并且更符合达梦数据库的规范和语法, 而DATE_FORMAT(UPDATED_DATE, '%Y-%m-%d') 不是原生的,虽然也可以用, 但这样写不走索引
select TO_CHAR(UPDATED_DATE, 'YYYY-MM-DD') from "S_USER" where TO_CHAR(UPDATED_DATE, 'YYYY-MM-DD')>='2024-03-28';
--不推荐DATE_FORMAT
select DATE_FORMAT(UPDATED_DATE, '%Y-%m-%d') from "TSP_SAFETY_INDEX" where DATE_FORMAT(UPDATED_DATE, '%Y-%m-%d')>='2024-03-28'
重构查询条件:如果可能的话,尽量避免在索引列上使用函数,而是调整查询条件,使其直接与索引列匹配
-- 入参用 to_date 可以走索引
EXPLAIN
SELECT * from "SMS3DEV".STUDENT where BIRTHDATE >= to_date('2024-02-01', 'YYYY-MM');
2. DATE_FORMAT 只用于mysql 和 DM
SELECT DATE_FORMAT(SYSDATE, '%Y-%m-%d %H:%i:%s') FROM dual;%Y 表示年份,四位数,例如2000,2001,…等。
%m 具有前导零的月份名称,例如:00,01,02,… 12
%d 如果是1个数字(小于10),那么一个月之中的第几天表示为加前导加0, 如:00, 01,02, …31
%H 24小时格式的小时,前导加0,例如:00,01..23
%h 小时,12小时格式,带前导零,例如:01,02 … 12
%i:两位数字的分钟数
%s:两位数字的秒数