文章目录
时间和字符串的转换是最常用的操作,必须熟练掌握。
oracle和mysql的方法不一样。
**** | 时间转换为字符串 | 字符串转换为时间 |
---|---|---|
oracle | to_char(create_date,‘yyyy-MM-dd’) | to_date(‘2024-05-30’,‘yyyy-MM-dd’) |
mysql | date_format(create_date,‘%Y-%m-%d’) | str_to_date(‘2024-05-30’,‘%Y-%m-%d’) |
oracle
to_char 是时间转转换为字符串
to_date 是字符串转换为时间
如: 字段是带有汉字的,那么用to_char
to_char(kprq,'yyyy-MM-dd')
如:
inv_date between to_date('2019-01-01','yyyy-MM-dd')
斜线日期转换为横线
例如日期为 2019/4/3
-- 这2种方法都可以
select to_date('2019/4/3',‘yyyy/MM/dd’);
select to_date('2019/4/3',‘yyyy-MM-dd’);
然后再转换为日期即可,完整语句如下:
-- 输出 2019-04-03
select to_char(to_date('2019/4/3','yyyy/MM/dd'),'yyyy-MM-dd') from dual;
这样的时间字符串如何转换20201212040506258
这个是 年月日时分秒毫秒 的字符串拼接。 如果想拿到2019-03-04这样的字符串呢?
to_char(to_date(substr(create_date,0,8),'yyyyMMdd'),'yyyy-MM-dd')
ORA-01830: 日期格式图片在转换整个输入字符串之前结束
一般是日期格式不对,例如:
传入的是 ‘2021-06-15 00:00:00’,
用的函数是 create_date = to_date(#{createDate,jdbcType=VARCHAR},‘yyyy-MM-dd’),那么就会报错。
mybatis中入参日期,数据库字段是date的写法
<if test="startDate != null and startDate != ''">
AND CREATE_DATE >= to_date(#{startDate},'yyyy-MM-dd HH24:MI:SS')
</if>
<if test="endDate != null and endDate != ''">
AND CREATE_DATE <= to_date(concat(#{endDate},'23:59:59'),'yyyy-MM-dd HH24:MI:SS')
</if>
mysql
mysql的写法不一样,oracle是to_char() to_date()
mysql是str_to_date() 和date_format()
STR_TO_DATE(‘2024-05-30’,‘%Y-%m-%d’)
DATE_FORMAT(now(),‘%Y-%m-%d’)
mysql 格式化
值 说明
%a 工作日名称缩写(从星期日到星期六)
%b 月份名称缩写(1月至12月)
%c 月份作为数字值(0到12)
%D 该月中的一天作为数字值,后跟后缀(第一,第二,第三,…)
%d 每月的某天(从01到31)作为数值
%e 一个月中的一天(从0到31)作为数值
%f 微秒(000000至999999)
%H 小时(00到23)
%h 小时(00到12)
%I 小时(00到12)
%i 分钟(00到59)
%j 一年中的某天(001至366)
%k 小时(00到23)
%l 小时(1到12)
%M 完整的月份名称(1月至12月)
%m 月份名称作为数字值(00到12)
%p 上午或下午
%r 采用12小时制AM或PM格式的时间(hh:mm:ss AM/PM)
%S 秒(00到59)
%s 秒(00到59)
%T 24小时制时间(hh:mm:ss)
%U 星期几是星期的第一天(00到53)
%u 每周的星期一是一周的第一天(00到53)
%V 星期几是星期的第一天(01到53) 从MySQL 3.23.8开始可用,并与%X一起使用
%v 星期几,星期一是一周中的第一天(01到53) 从MySQL 3.23.8开始可用,并与%X一起使用
%W 平日全名(周日至周六)
%w 星期几,其中周日= 0,周六= 6
%X 一周中第一天的星期几 从MySQL 3.23.8开始可用,并与%V一起使用
%x 一周的第一天为周一的第一天 从MySQL 3.23.8开始可用,并与%v 一起使用
%Y 年份(4位数字)
%y 年份(两位数)