sql monitor中timestamp變數轉換可識別格式

startay發表於2016-06-27

工作中使用SQL MONITOR分析變數時,若有TIMESTAMP格式,會出現“78740616010101” 無法識別的數字,透過下面方法可轉換能識別的時間格式。

Binds
========================================================================================================================
| Name | Position |     Type     |                                        Value                                        |
========================================================================================================================
| :1   |        1 | NUMBER       | 42599677                                                                            |
| :2   |        2 | TIMESTAMP    | 78740616010101                                                                      |
| :3   |        3 | TIMESTAMP    | 78740616010101                                                                      |
| :4   |        4 | VARCHAR2(32) | 360                                                                                 |
| :5   |        5 | NUMBER       | 10000                                                                               |
========================================================================================================================

可透過下面兩種方法解析變數,轉換可識別的時間

方法一:

  1.  select to_timestamp(
  2.    to_char( to_number( substr( p_str, 1, 2 ), 'xx' ) - 100, 'fm00' ) ||
  3.    to_char( to_number( substr( p_str, 3, 2 ), 'xx' ) - 100, 'fm00' ) ||
  4.    to_char( to_number( substr( p_str, 5, 2 ), 'xx' ), 'fm00' ) ||
  5.    to_char( to_number( substr( p_str, 7, 2 ), 'xx' ), 'fm00' ) ||
  6.    to_char( to_number( substr( p_str,9, 2 ), 'xx' )-1, 'fm00' ) ||
  7.    to_char( to_number( substr( p_str,11, 2 ), 'xx' )-1, 'fm00' ) ||
  8.    to_char( to_number( substr( p_str,13, 2 ), 'xx' )-1, 'fm00' ), 'yyyymmddhh24miss' )
  9.   from (select '&raw_timestamp' p_str from dual)
  10. Enter value for raw_timestamp: 787406160101
  11. old 9: from (select '&raw_timestamp' p_str from dual)
  12. new 9: from (select '787406160101' p_str from dual)

  13. TO_TIMESTAMP(TO_CHAR(TO_NUMBER(SUBSTR(P_STR,1,2),'XX')-100,'FM00')||TO_CHAR
  14. ---------------------------------------------------------------------------
  15. 22-JUN-16 12.00.00.000000000 AM

方法二:

  1. set serverout on
  2. declare
  3.     d1 date;
  4. begin
  5.     dbms_stats.convert_raw_value(hextoraw('78740616010101'),d1);
  6.     dbms_output.put_line('DATE: '||to_char(d1,'yyyy-mm-dd hh24:mi:ss'));
  7. end;
  8. DATE: 2016-06-22 00:00:00






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17086096/viewspace-2121037/,如需轉載,請註明出處,否則將追究法律責任。

相關文章