简体   繁体   中英

convert a string to oracle sql timestamp Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)

Greeting Community.

I saw similar examples in Java but how do we do it it SQL in particular Oracle. For now I just do this which it works because we are in PDT timezone.

-Thx for the help!

with xx as ( 
select replace('Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)',' GMT-0700 (PDT)','') as dt from dual

)

select to_date(dt,'DY MON DD YYYY HH24:MI:SS') from xx

The input is a timestamp with time zone. It has redundant information about the time zone; some of that must be stripped away. For example, if you choose to trust PDT and ignore the GMT offset, you could do something like this:

with xx as ( 
select regexp_replace('Mon Aug 19 2019 08:21:48 GMT-0700 (PDT)','GMT-\d{4} \(|\)') 
       as str_ts_with_tz 
from   dual
)
select to_timestamp_tz(str_ts_with_tz,'Dy Mon DD YYYY HH24:MI:SS TZD') 
       as oracle_ts_with_tz 
from   xx
;



ORACLE_TS_WITH_TZ                      
---------------------------------------
2019-08-19 08:21:48 America/Los_Angeles

Note that the resulting data type is timestamp with time zone . You can further cast this as timestamp or as date (simply discarding the time zone information) if needed; this is a simple operation, internal to Oracle. But that will lose information; think twice before you do that.

Note also that the timestamp is presented in a different format in my output, compared to your input. This is because my NLS_TIMESTAMP_TZ_FORMAT is 'yyyy-mm-dd hh24:mi:ss tzr' .

If you are wondering why you must make a choice (which, then, means "why you need to delete part of the input string first") regarding the time zone information: PDT is simply not the same as GMT-0700. It may be that in summer, but not in winter. Oracle won't accept such self-contradicting nonsense as input to its functions. Either it's GMT-0700 or it's PDT, it can't be both. And, you can't just use REPLACE (not easily, anyway), because what must be replaced may have variable characters in it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM