我在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)
是否可以将日期和时间字段转换为这种时间戳格式?日期字段中的时间不正确,需要用时间字段替换。
答案 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;
干杯!