Làm cách nào để chèn dấu thời gian trong Oracle?


Câu trả lời:


135
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));

nếu bạn muốn dấu thời gian hiện tại được chèn thì:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
Tại sao TO_DATEthay vì TO_TIMESTAMP?
Dave Costa,

Nó không quan trọng đối với INSERTcâu lệnh đơn giản này , nhưng nói chung bạn không muốn sử dụng các biến ràng buộc như thế này. Việc chuyển đổi kiểu trong câu lệnh đầu tiên của bạn khiến nó không bị ràng buộc nhạy cảm, điều này hạn chế khả năng tạo kế hoạch tốt của Oracle. Trình tối ưu hóa có thể hoạt động tốt hơn nếu bạn sử dụng values (:ts_val)thay thế, giả sử: ts_val ánh xạ trực tiếp đến dấu thời gian.
Jon Heller

@JonHeller Bạn có thể chỉ ra một ví dụ cụ thể về cách sử dụng to_timestampsẽ gây ra một kế hoạch thực thi sai cho một câu lệnh SQL có thể lập kế hoạch không? Tôi có thể đưa ra một ví dụ về cách nó sẽ không. Thay vào đó, điều mà tôi nghĩ tất cả chúng ta đều muốn tránh là sự ép buộc kiểu dữ liệu không mong muốn ngăn cản việc sử dụng thao tác nguồn hàng dự kiến ​​(tức là thao tác tối ưu).
Jeff Holt

@ jeff6times7 Xem Gist này để biết giải thích về cách các biến ràng buộc chưa được chuyển đổi có thể hoạt động tốt hơn các biến ràng buộc đã chuyển đổi. Sự khác biệt có lẽ chỉ quan trọng nếu dữ liệu bị lệch. Với các kiểu ràng buộc gốc, Oracle có thể hiểu dữ liệu tốt hơn và đưa ra các ước tính tốt hơn dựa trên các giá trị.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPSYSTIMESTAMPlà những từ dành riêng của Oracle cho mục đích này. Chúng là tương tự dấu thời gian của SYSDATE.


19
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

9

Loại phụ thuộc vào giá trị bạn muốn chèn đến từ đâu. Nếu bạn muốn chèn thời gian hiện tại, bạn có thể sử dụng CURRENT_TIMESTAMPnhư được hiển thị trong các câu trả lời khác (hoặc SYSTIMESTAMP).

Nếu bạn có thời gian là một chuỗi và muốn chuyển nó thành dấu thời gian, hãy sử dụng biểu thức như

to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')

Tôi hy vọng rằng các thành phần định dạng thời gian là tự giải thích, ngoại trừ điều đó FF3có nghĩa là 3 chữ số của độ chính xác dưới giây. Bạn có thể tăng độ chính xác lên đến 6 chữ số.

Nếu bạn đang chèn từ một ứng dụng, câu trả lời tốt nhất có thể phụ thuộc vào cách giá trị ngày / giờ được lưu trữ trong ngôn ngữ của bạn. Ví dụ, bạn có thể ánh xạ các đối tượng Java nhất định trực tiếp vào một TIMESTAMPcột, nhưng bạn cần phải hiểu các JDBCánh xạ kiểu.


4

Tôi thích ký tự dấu thời gian ANSI:

insert into the_table 
  (the_timestamp_column)
values 
  (timestamp '2017-10-12 21:22:23');

Thêm chi tiết trong hướng dẫn: https://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062


Oracle 11. Trường được định nghĩa là TIMESTAMP (6) không phải NULL. Đang sử dụng, timestamp '2019-05-16 10:05:51:19:277401'tôi gặp lỗi này: ORA-01882: không tìm thấy vùng múi giờ
Alex 75

1

Chèn ngày trong sql

insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

Nếu giả sử chúng tôi muốn chèn ngày hệ thống

insert
into tablename (timestamp_value)
values (sysdate);

0

Trước hết, bạn cần tạo trường Nullable, sau đó đơn giản như vậy - thay vì đặt một giá trị, hãy đặt mã này CURRENT_TIMESTAMP.


0

Để tham khảo tương lai của riêng tôi:

Với cx_Oracle, sử dụng cursor.setinputsize (...):

mycursor = connection.cursor();

mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);

Không cần chuyển đổi trong db. Xem Tài liệu Oracle


0

Người ta có thể đơn giản sử dụng

INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');

Bằng cách này, bạn sẽ không phải lo lắng về chuỗi định dạng ngày, chỉ cần sử dụng định dạng dấu thời gian mặc định.

Hoạt động với Oracle 11, không có ý tưởng nếu nó làm cho các phiên bản Oracle trước đó.


-6
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)

cái này hoạt động cho mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.