Làm cách nào để chèn giá trị ngày giờ vào cơ sở dữ liệu SQLite?


109

Tôi đang cố gắng chèn giá trị ngày giờ vào cơ sở dữ liệu SQLite . Có vẻ như không thành công nhưng khi tôi cố gắng truy xuất giá trị thì có lỗi:

<Không thể đọc dữ liệu>

Các câu lệnh SQL là:

create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')

Câu trả lời:


153

Định dạng bạn cần là:

'2007-01-01 10:00:00'

tức là yyyy-MM-dd HH: mm: ss

Tuy nhiên, nếu có thể, hãy sử dụng truy vấn được tham số hóa vì điều này giúp bạn khỏi lo lắng về các chi tiết định dạng.


Làm thế nào để một thứ tự theo ngày với các chuỗi như vậy?
IgorGanapolsky,

3
Khi bạn định dạng ngày tháng như thế này, thứ tự ngày tháng và thứ tự từ vựng hoạt động giống nhau. Ví dụ: '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01' cả dưới dạng chuỗi và ngày. Nhưng bạn không cần phải quan tâm đến điều này vì SQLite ORDER BY sẽ lo việc đặt hàng cho bạn.
itowlson,

7
Lưu ý rằng bạn không thể so sánh đáng tin cậy các ngày với độ chính xác khác nhau bằng cách sử dụng thứ tự từ vựng, ví dụ: "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" trả về 1 nhưng "CHỌN datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" trả về 0.
Shane

@itowlson Điều này sẽ hoạt động như thế nào khi bạn có ứng dụng đa ngôn ngữ?
batmaci


17

Bạn phải thay đổi định dạng của chuỗi ngày bạn đang cung cấp để có thể chèn nó bằng hàm STRFTIME. Lý do là, không có tùy chọn cho từ viết tắt của tháng:

%d  day of month: 00
%f  fractional seconds: SS.SSS
%H  hour: 00-24
%j  day of year: 001-366
%J  Julian day number
%m  month: 01-12
%M  minute: 00-59
%s  seconds since 1970-01-01
%S  seconds: 00-59
%w  day of week 0-6 with sunday==0
%W  week of year: 00-53
%Y  year: 0000-9999
%%  % 

Cách thay thế là định dạng ngày / giờ thành định dạng đã được chấp nhận:

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH: MM
  3. YYYY-MM-DD HH: MM: SS
  4. YYYY-MM-DD HH: MM: SS.SSS
  5. YYYY-MM-DDTHH: MM
  6. YYYY-MM-DDTHH: MM: SS
  7. YYYY-MM-DDTHH: MM: SS.SSS
  8. HH: MM
  9. HH: MM: SS
  10. HH: MM: SS.SSS
  11. hiện nay

Tham khảo: Các hàm Ngày & Giờ trong SQLite


Mặc dù không được liệt kê trong bảng các tài liệu cũng trạng thái mà bạn có thể thêm 'Z' hoặc offsets như '-0400'
coolaj86

10

Sử dụng CURRENT_TIMESTAMPkhi bạn cần, thay vì OF NOW()(là MySQL)


1
điều này đã làm việc, một điều là sai. CURRENT_TIMESTAMP ngày trả lại không có UTC, bạn có biết cách giải quyết vấn đề này không. Cảm ơn trước!
Ulug'bek Ro'zimboyev

8

Đọc này : 1.2 Datevà Loại dữ liệu tốt nhất của Time Datatype để lưu trữ ngày và giờ là:

TEXT định dạng tốt nhất là: yyyy-MM-dd HH:mm:ss

Sau đó đọc này trang; đây là giải thích tốt nhất về ngày và giờ trong SQLite. Tôi hy vọng điều này sẽ giúp bạn


5
Bạn nên cân nhắc trả lời câu hỏi, với các liên kết hỗ trợ câu trả lời của bạn, không chỉ là một loạt các liên kết
Gonzalo

0

Đây có thể không phải là phương pháp phổ biến hoặc hiệu quả nhất, nhưng tôi có xu hướng bỏ qua các kiểu dữ liệu mạnh trong SQLite vì chúng về cơ bản đều được kết xuất dưới dạng chuỗi.

Tôi đã viết một trình bao bọc C # mỏng xung quanh thư viện SQLite trước đây (tất nhiên là khi sử dụng SQLite với C #) để xử lý các chèn và trích xuất đến và đi từ SQLite như thể tôi đang xử lý các đối tượng DateTime.


Không cắt nó cho các ngày nếu ví dụ bạn muốn sắp xếp theo trường đó; bạn kết thúc với một so sánh chuỗi ...
G__
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.