在oracle中发布日期问题

时间:2018-04-11 11:32:35

标签: sql oracle

我试图从ISO格式的一个表中提取日期,然后以美国日期格式存储它?

Trunc(cast(to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"')as date))

实际输出:

4/11/2018  12:00:00 AM

预期产出:

4/11/2018

2 个答案:

答案 0 :(得分:2)

  

我试图从ISO格式的一个表中提取日期,然后以美国日期格式存储它?

日期(和时间戳)没有格式 - 日期为in a table by 7 bytes,时间戳为20字节。

您可以使用DATE以及TO_TIMESTAMP_TZTZR格式模型获取TZH:THM数据类型的值,以匹配时区区域/偏移量(它们将两者都适用于Z ulu时区区域)

SELECT CAST( 
         TO_TIMESTAMP_TZ(
           ATTRIBUTE_39,
           'yyyy-mm-dd"T"hh24:mi:ss.ff3TZH:TZM'
         ) AT TIME ZONE 'UTC'               -- Convert to a common time zone
         AS DATE
       )
FROM   your_table;

当您从表中选择时,您正在使用的任何客户端程序(通常)将隐式地将其内部使用的7字节转换为您(用户)可以读取的字符串。 SQL / Plus和SQL Developer在执行此隐式转换时使用NLS_DATE_FORMAT会话参数作为格式模型。

因此您的查询有效地转换为:

SELECT TO_CHAR(
         CAST( 
           TO_TIMESTAMP_TZ(
             ATTRIBUTE_39,
             'yyyy-mm-dd"T"hh24:mi:ss.ff3TZR'
           ) AT TIME ZONE 'UTC'
           AS DATE
         ),
         (
           SELECT VALUE
           FROM   NLS_SESSION_PARAMETERS
           WHERE  PARAMETER = 'NLS_DATE_FORMAT'
         )
       )
FROM   your_table;

如果要格式化日期或时间戳,则必须使用TO_CHAR()将其显式转换为字符串:

SELECT TO_CHAR(
         CAST( 
           TO_TIMESTAMP_TZ(
             ATTRIBUTE_39,
             'yyyy-mm-dd"T"hh24:mi:ss.ff3TZR'
           ) AT TIME ZONE 'UTC'
           AS DATE
         ),
         'MM/DD/YYYY'
       )
FROM   your_table;

或者通过更改NLS_DATE_FORMAT会话参数:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

(请注意,这只会更改当前会话中的格式,并且不会为任何其他会话/用户更改格式。)

答案 1 :(得分:0)

试试这个:

    Call<List<ResponseData>> call = api.getData();

    call.enqueue(new Callback<List<ResponseData>>() {
    @Override
    public void onResponse(Call<List<ResponseData>> call, Response<List<ResponseData>> response) {
        if (response.isSuccessful() && response.body().isSuccessful()){
            ResponseData data=response.body();
            //Log.d("Message:",data.getErrorMessage);
        }
    }

    @Override
    public void onFailure(Call<List<Hero>> call, Throwable t) {
        Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

默认日期/时间格式取决于您的NLS_DATE_FORMAT设置。