将Oracle日期转换为RFC 3339格式

时间:2019-09-05 22:34:00

标签: sql oracle

我在oracle中有一个返回日期的日期字段

  

17-APR-19 12:00:00 AM

我还有一个时间列(VARCHAR),该列会以军方返回HHMM

  

1810

我想结合这两个字段来创建一个时间戳,该时间戳被格式化为RFC 3339标准。这样比较好。

  

2019-04-17T18:10:00Z

我可以使用以下方法将时间戳转换为正确的时间:

vis_util.visualize_boxes_and_labels_on_image_array(
        imageOutput,
        np.squeeze(boxes),
        np.squeeze(classes).astype(np.int32),
        np.squeeze(scores),
        category_index,
        use_normalized_coordinates=True,
        line_thickness=2,
        min_score_thresh=0.60,
        skip_scores=True,
        skip_labels=True)
cv2.imwrite('../project/test.png', imageOutput)
    # Clean up
    print("10 secs")

    time.sleep(10)

是否可以将日期和时间字段转换为这种时间戳格式?日期字段中的时间不正确,需要用时间字段替换。

3 个答案:

答案 0 :(得分:1)

您可以TRUNC将日期设置为午夜,然后使用NUMTODSINTERVAL向其中添加小时和分钟,以获取正确的时间部分:

Oracle设置

CREATE TABLE your_table ( your_date_column, your_time_column ) AS
  SELECT DATE '2019-04-17', '1810' FROM DUAL

查询

SELECT TO_CHAR(
         TRUNC( your_date_column )
         + NUMTODSINTERVAL( SUBSTR( your_time_column, 1, 2 ), 'HOUR' )
         + NUMTODSINTERVAL( SUBSTR( your_time_column, 3, 2 ), 'MINUTE' ),
         'YYYY-MM-DD"T"HH24:MM:SS"Z"'
       ) AS combined_date_time
FROM   your_table

输出

| COMBINED_DATE_TIME   |
| :------------------- |
| 2019-04-17T18:04:00Z |

db <>提琴here

如果您希望将值设为TIMESTAMP WITH TIME ZONE,则:

SELECT CAST(
         TRUNC( your_date_column )
         + NUMTODSINTERVAL( SUBSTR( your_time_column, 1, 2 ), 'HOUR' )
         + NUMTODSINTERVAL( SUBSTR( your_time_column, 3, 2 ), 'MINUTE' )
         AS TIMESTAMP
       ) AT TIME ZONE 'UTC' AS combined_date_time
FROM   your_table

答案 1 :(得分:0)

只需进行一些字符串连接

to_char( your_date, 'yyyy-mm-dd' ) || 
  'T' ||
  substr( your_time, 1, 2 ) ||
  ':' ||
  substr( your_time, 3, 2 ) ||
  ':00Z'

假设your_time总是4个字符长(即2 AM表示为字符串'0200'而不是'200')。这还假设秒始终为“ 00”。

答案 2 :(得分:0)

您可以通过将your_number转换为分钟并将其添加到您的日期,然后按如下所示将其转换为时间戳来实现:

SELECT CAST(
         your_date + 
         (FLOOR(YOUR_TIME/100)*60 + MOD(YOUR_TIME,100)) / 1440
         AS TIMESTAMP
       ) AT TIME ZONE 'UTC' AS YOUR_TIME_STAMP
FROM   your_table;

干杯!