Date & Time trong SQLite
Trong bài học này mình sẽ cùng tìm hiểu date và time trong SQLite
. SQLite
hỗ trợ những loại date and time nào? Chúng ta sẽ cùng tìm hiểu trong nội dung tiếp theo.
1. Date và Time được hỗ trợ trong SQLite
SQLite
hỗ trợ năm hàm ngày và giờ như sau:
Hàm | Ví dụ |
date(timestring, modifiers...) | Trả về ngày ở định dạng: YYYY-MM-DD |
time(timestring, modifiers...) | Trả về thời gian là HH: MM: SS |
datetime(timestring, modifiers...) | Trả về YYYY-MM-DD HH: MM: SS |
julianday(timestring, modifiers...) | Trả về số ngày kể từ buổi trưa ở Greenwich vào November 24, 4714 B.C. |
strftime(timestring, modifiers...) | Trả về ngày được định dạng theo chuỗi định dạng ở đối số đầu tiên |
Tất cả năm hàm ngày và thời gian trên đều lấy một time string làm đối số. time string được theo sau bởi không hoặc nhiều modifiers. Hàm strftime () cũng lấy một chuỗi định dạng làm đối số đầu tiên của nó. Phần sau đây sẽ cung cấp cho bạn chi tiết về các loại time string và modifier khác nhau.
2. Các loại Time String trong SQLite
Một time string có thể ở bất kỳ định dạng nào sau đây
Bài viết này được đăng tại [free tuts .net]
Time String | EX |
YYYY-MM-DD | 2019-12-30 |
YYYY-MM-DD HH:MM | 2019-12-30 12:10 |
YYYY-MM-DD HH:MM:SS.SSS | 2019-12-30 12:10:04.100 |
MM-DD-YYYY HH:MM | 30-12-2019 12:10 |
HH:MM | 12:10 |
YYYY-MM-DDTHH:MM | 2019-12-30 12:10 |
HH:MM:SS | 12:10:01 |
YYYYMMDD HHMMSS | 20191230 121001 |
now | 2019-04-09 |
Bạn có thể sử dụng chữ "T" làm ký tự ngăn cách ngày và giờ.
3. Các loại Modifier trong SQLite
Time string có thể được theo sau bởi 0 hoặc nhiều modifier sẽ thay đổi ngày/thời gian được trả về bởi bất kỳ 1 trong 5 hàm nói trên. Modifier được áp dụng từ trái sang phải.
Các modifer sau đây có sẵn trong SQLite.
- NNN days
- NNN hours
- NNN minutes
- NNN.NNNN seconds
- NNN months
- NNN years
- start of month
- start of year
- start of day
- weekday N
- unixepoch
- localtime
- utc
4. Formatter trong SQLite
SQLite cung cấp một hàm strftime () rất tiện dụng để định dạng bất kỳ ngày và giờ nào. Bạn có thể sử dụng các thay thế (Substitution) sau để định dạng ngày và giờ của bạn.
Substitution | Description |
%d | Ngày trong tháng, 01-31 |
%f | Giây phân số, SS.SSS |
%H | Giờ, 00-23 |
%j | Ngày trong năm, 001-366 |
%J | Số ngày Julian, DDDD.DDDD |
%m | Tháng, 00-12 |
%M | Phút, 00-59 |
%s | Giây kể từ 1970-01-01 |
%S | Giây, 00-59 |
%w | Ngày trong tuần, 0-6 (0 là Chủ nhật) |
%W | Tuần trong năm, 01-53 |
%Y | Năm, YYYY |
%% | ký hiệu % |
5. Ví dụ date và time trong SQLite
Bây giờ chúng ta hãy thử các ví dụ khác nhau bằng cách sử dụng dấu nhắc SQLite. Lệnh sau sẽ tính ngày hiện tại.
sqlite> SELECT date('now'); 2019-04-07
Lệnh sau sẽ tính ngày cuối cùng của tháng hiện tại.
sqlite> SELECT date('now','start of month','+1 month','-1 day'); 2019-04-30
Lệnh sau sẽ tính ngày và giờ cho dấu thời gian UNIX đã cho 1092941466.
sqlite> SELECT datetime(1092941466, 'unixepoch'); 2004-08-19 18:51:06
Lệnh sau sẽ tính ngày và giờ cho dấu thời gian UNIX nhất định 1092941466 và bù cho múi giờ địa phương của bạn.
sqlite> SELECT datetime(1092941466, 'unixepoch', 'localtime'); 2004-08-19 13:51:06
Lệnh sau tính toán dấu thời gian UNIX hiện tại.
sqlite> SELECT strftime('%s','now'); 1393348134
Lệnh sau tính toán số ngày kể từ khi ký Tuyên ngôn Độc lập Hoa Kỳ.
sqlite> SELECT julianday('now') - julianday('1776-07-04'); 86798.7094695023
Lệnh sau sẽ tính số giây kể từ một thời điểm cụ thể trong năm 2004.
sqlite> SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56'); 295001572
Lệnh sau sẽ tính ngày thứ ba đầu tiên của tháng 10 cho năm hiện tại.
sqlite> SELECT date('now','start of year','+9 months','weekday 2'); 2019-10-01
Lệnh sau sẽ tính thời gian kể từ thời kỳ UNIX tính bằng giây (như strftime ('% s', 'now') ngoại trừ bao gồm phần phân đoạn).
sqlite> SELECT (julianday('now') - 2440587.5)*86400.0; 1367926077.12598
Để chuyển đổi giữa UTC và giá trị thời gian cục bộ khi định dạng ngày, hãy sử dụng modifier utc hoặc giờ địa phương như sau:
sqlite> SELECT time('12:00', 'localtime'); 05:00:00
sqlite> SELECT time('12:00', 'utc'); 19:00:00