Oracle与Mysql时间格式化
Oracle与Mysql时间格式化
一,Oracle格式化时间:
Oracle 获取当前日期及日期格式
获取系统日期: SYSDATE() 格式化日期: TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS) 或 TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS) 格式化数字: TO_NUMBER 注: TO_CHAR 把日期或数字转换为字符串 TO_CHAR(number, '格式') TO_CHAR(salary, '$99,999.99') TO_CHAR(date, '格式') TO_DATE 把字符串转换为数据库中的日期类型 TO_DATE(char, '格式') TO_NUMBER 将字符串转换为数字 TO_NUMBER(char, '格式') 返回系统日期,输出 25-12月-09 select sysdate from dual; mi是分钟,输出 2009-12-25 14:23:31 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; mm会显示月份,输出 2009-12-25 14:12:31 select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual; 输出 09-12-25 14:23:31 select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual 输出 2009-12-25 14:23:31 select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual 而如果把上式写作: select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual 则会报错,因为小时hh是12进制,14为非法输入,不能匹配。 输出 $10,000,00 : select to_char(1000000,'$99,999,99') from dual; 输出 RMB10,000,00 : select to_char(1000000,'L99,999,99') from dual; 输出 1000000.12 : select trunc(to_number('1000000.123'),2) from dual; select to_number('1000000.123') from dual; 转换的格式: 表示 year 的:y 表示年的最后一位 、 yy 表示年的最后2位 、 yyy 表示年的最后3位 、 yyyy 用4位数表示年 表示month的: mm 用2位数字表示月 、 mon 用简写形式, 比如11月或者nov 、 month 用全称, 比如11月或者november 表示day的: dd 表示当月第几天 、 ddd 表示当年第几天 、 dy 当周第几天,简写, 比如星期五或者fri 、 day 当周第几天,全称, 比如星期五或者friday 表示hour的:hh 2位数表示小时 12进制 、 hh24 2位数表示小时 24小时 表示minute的:mi 2位数表示分钟 表示second的:ss 2位数表示秒 60进制 表示季度的:q 一位数 表示季度 (1-4) 另外还有ww 用来表示当年第几周 w用来表示当月第几周。 24小时制下的时间范围:00:00:00-23:59:59 12小时制下的时间范围:1:00:00-12:59:59 数字格式: 9 代表一个数字 0 强制显示0 $ 放置一个$符 L 放置一个浮动本地货币符 . 显示小数点 , 显示千位指示符 补充: 当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual; 当前时间减去7小时的时间 select sysdate - interval '7' hour from dual; 当前时间减去7天的时间 select sysdate - interval '7' day from dual; 当前时间减去7月的时间 select sysdate,sysdate - interval '7' month from dual; 当前时间减去7年的时间 select sysdate,sysdate - interval '7' year from dual; 时间间隔乘以一个数字 select sysdate,sysdate - 8*interval '7' hour from dual; 含易做图释: Dual伪列 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。 不同系统可能返回日期的格式不一样。 返回当前连接的用户:select user from dual; 二,mysql格式化时间: MYSQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 2009-12-25 14:38:59 select now(); 输出 09-12-25 select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59) %I, %i 两位数字形式的分( 00,01, ..., 59) %H 两位数字形式的小时,24 小时(00,01, ..., 23) %h 两位数字形式的小时,12 小时(01,02, ..., 12) %k 数字形式的小时,24 小时(0,1, ..., 23) %l 数字形式的小时,12 小时(1, 2, ..., 12) %T 24 小时的时间形式(hh:mm:ss) %r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM) %p AM或PM %W 一周中每一天的名称(Sunday, Monday, ..., Saturday) %a 一周中每一天名称的缩写(Sun, Mon, ..., Sat) %d 两位数字表示月中的天数(00, 01,..., 31) %e 数字形式表示月中的天数(1, 2, ..., 31) %D 英文后缀表示月中的天数(1st, 2nd, 3rd,...) %w 以数字形式表示周中的天数( 0 = Sunday, 1=Monday, ..., 6=Saturday) %j 以三位数字表示年中的天数( 001, 002, ..., 366) %U 周(0, 1, 52),其中Sunday 为周中的第一天 %u 周(0, 1, 52),其中Monday 为周中的第一天 %M 月名(January, February, ..., December) %b 缩写的月名( January, February,...., December) %m 两位数字表示的月份(01, 02, ..., 12) %c 数字表示的月份(1, 2, ...., 12) %Y 四位数字表示的年份 %y 两位数字表示的年份 %% 直接值“%” curdate() MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +---------------------+ 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() ,current_timestamp ,localtime() ,localtime ,localtimestamp -- (v4.0.6) ,localtimestamp() -- (v4.0.6) 这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。 1.2 获得当前日期+时间(date + time)函数:sysdate() sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了: mysql> select now(), sleep(3), now(); +---------------------+----------+---------------------+ | now() | sleep(3) | now() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 | +---------------------+----------+---------------------+mysql> select sysdate(), sleep(3), sysdate(); +---------------------+----------+---------------------+ | sysdate() | sleep(3) | sysdate() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 | +---------------------+----------+---------------------+ 可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3秒。MySQL Manual 中是这样描述 sysdate() 的:Return the time at which the functionexecutes。 sysdate() 日期时间函数,一般情况下很少用到。 2. 获得当前日期(date)函数:curdate() mysql> select curdate(); +------------+ | curdate() | +------------+ | 2008-08-08 | +------------+ 其中,下面的两个日期函数等同于 curdate(): current_date() ,current_date 3. 获得当前时间(time)函数:curtime() mysql> select curtime(); +-----------+ | curtime() | +-----------+ | 22:41:30 | +-----------+ 其中,下面的两个时间函数等同于 curtime(): current_time() ,current_time 4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp() mysql> select utc_timestamp(), utc_date(), utc_time(), now() +---------------------+------------+------------+---------------------+ | utc_timestamp() | utc_date() | utc_time() | now() | +---------------------+------------+------------+---------------------+ | 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 | +---------------------+------------+------------+---------------------+ 因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
二、MySQL 日期时间 Extract(选取) 函数。
1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒 set @dt = '2008-09-10 07:15:30.123456'; select date(@dt); -- 2008-09-10 select time(@dt); -- 07:15:30.123456 select year(@dt); -- 2008 select quarter(@dt); -- 3 select month(@dt); -- 9 select week(@dt); -- 36 select day(@dt); -- 10 select hour(@dt); -- 7 select minute(@dt); -- 15
上一个:Oracle联机日志恢复案例
下一个:Rac中因vip网关引起错误的解决
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?