Kiểu dữ liệu của ngày trong php là gì?

Trọng tâm ở đây sẽ là loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4, mặc dù phần lớn áp dụng cho ________ 04 cũng áp dụng cho ________ 06. [Để biết thêm thông tin cơ bản về các loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6 và
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
8, hãy đọc các bài viết trên Tạp chí Oracle của Jonathan Gennick "Datetime Datatypes Add Precision" và "Finding the Time in Between" [cả hai đều được xuất bản trong tạp chí tháng 11]. -Tháng mười hai. số ra năm 2002]

Cách Oracle lưu trữ DATE. Điều đầu tiên cần nắm bắt về loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 trong Oracle là biểu diễn bên trong của nó cho phép nó được hiển thị và thao tác theo nhiều cách khác nhau. Nó hoàn toàn độc lập với bất kỳ định dạng chuỗi cụ thể nào. Nếu bạn
 
 SELECT
 *
 FROM
 emp
 WHERE
 SYSDATE - TO_YMINTERVAL['15-00'] > hiredate
 
8 một loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4, Oracle sẽ tự động chuyển đổi nó thành chuỗi có thể đọc được, nhưng đây không phải là cách giá trị thực sự được lưu trữ

Chọn thời gian hệ thống hiện tại bằng cách sử dụng SYSDATE, trả về giá trị kiểu DATE và là ngày giờ hiện tại được đặt cho hệ điều hành chứa cơ sở dữ liệu

 
 
 
0 TỪ kép /* e. g. 25-JUL-05 */

Định dạng được kiểm soát bởi tham số Oracle

 
 
 
1 và có thể thay đổi trên cơ sở phiên [xem bên dưới]. Để có được một cảm giác cho đại diện nội bộ

 
 
 
2

Các giá trị được phân tách bằng dấu phẩy trong kết quả tương ứng với các byte mà Oracle sử dụng để lưu trữ từng thành phần của ngày và giờ, từ thế kỷ này sang thế kỷ khác Một lưu ý quan trọng ở đây; . Trong một số trường hợp, bạn có thể muốn so sánh hai ngày trên một cơ sở khác, chẳng hạn như năm, tháng hoặc ngày. Trong những trường hợp như vậy, các hàm như

 
 
 
5 có thể hữu ích để làm tròn các thành phần giờ, phút và giây của hai
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 mà bạn đang so sánh

Xem "Số học ngày" bên dưới để biết thêm chi tiết

Nếu bạn quen thuộc với OOP, cũng có thể hữu ích khi coi các loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 là đối tượng. Họ sở hữu cả hai thuộc tính [năm, tháng, giờ, v.v. ] và hành vi, chẳng hạn như

 
 
 
8

Điều này trả về ngày bảy ngày trước. "Hành vi" khác bao gồm các phép so sánh NGÀY, có nghĩa là bạn có thể SẮP XẾP THEO, NHÓM THEO, tìm ngày

 
 
 
9, v.v. và phép trừ. trừ một
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 từ một số khác để nhận chênh lệch số nguyên theo ngày [hoặc một loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
8, khi sử dụng các giá trị
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6]

Chuyển đổi giữa các loại NGÀY và chuỗi. Các hàm

 
 
 
3 và
 
 
 
4 được sử dụng để chuyển đổi giữa Oracle
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4"đối tượng" và chuỗi ngày có thể đọc được của con người. Cả hai hàm đều có ba đối số; . g.
 
 
 
6]. Về mặt khái niệm, mặt nạ định dạng tương tự như một biểu thức chính quy; . Mặt nạ định dạng được mô tả trong Tham chiếu SQL cơ sở dữ liệu Oracle trong "Mô hình định dạng. "

Làm việc với

 
 
 
8. Đây là một ví dụ đơn giản, một lần nữa sử dụng hàm
 
 
 
9

 
 
 
0

Nhìn vào mặt nạ định dạng một cách chi tiết,

 
 
 
1 biểu thị một năm có bốn chữ số,
 
 
 
2 một tháng có hai chữ số,
 
 
 
3 một ngày có hai chữ số trong tháng, ____84 giờ trong đồng hồ 24 giờ,
 
 
 
5 phút trong khoảng từ 0 đến 59, . Lưu ý các ký tự sau được chuyển từ mặt nạ định dạng vào đầu ra "nguyên trạng"

 
 
 
7

Các chuỗi khác có thể được "chuyển qua" bằng cách đặt chúng trong dấu ngoặc kép

 
 
 
8

Có rất nhiều mẫu mặt nạ định dạng khác có sẵn để giải quyết nhiều trường hợp sử dụng khác nhau, như bạn sẽ tìm thấy tài liệu

Ghi chú.

 
 
 
8 cũng có thể được sử dụng với các loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6

Làm việc với TO_DATE. Oracle có thể phân tích các chuỗi thành các loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4, sử dụng cùng một mặt nạ định dạng như
 
 
 
8. Đưa ra một chuỗi như 20050726173102

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
1

Ghi chú. Đối với các loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6, chức năng tương đương là
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
34

Thay đổi định dạng ngày mặc định. Theo mặc định, Oracle hiển thị các loại NGÀY theo mặt nạ định dạng được xác định trong tham số

 
 
 
1. Điều này có thể được thay đổi trong phiên như

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
36

Ngày số học. Để xác định ngày sáu ngày sau ngày 26 tháng 7 năm 2005, tôi chỉ cần thêm giá trị 6 vào đối tượng DATE

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
37

Toàn bộ đơn vị nhỏ nhất cho loại hoạt động này là một ngày. Để trừ 18 giờ, tôi cần phân số thích hợp của một ngày

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
38

Tương tự, để thêm 59 giây

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
39

Để làm việc theo tháng hoặc năm, với điều kiện là không thể biểu thị bằng số ngày cố định [lưu ý các năm nhuận và tháng có số ngày khác nhau], bạn cần hàm

 
 
 
0. Để thêm mười hai tháng vào một ngày

 
 
 
1

Ghi chú. Để trừ tháng, hãy sử dụng dấu âm

Hàm

 
 
 
2 trả về ngày cuối cùng của tháng cho loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4

 
 
 
4

Hàm

 
 
 
5 làm tròn xuống
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4, theo mặt nạ ngày mà nó được cung cấp làm đối số thứ hai. Bạn có thể sử dụng nó khi thực hiện so sánh
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 khi bạn muốn loại bỏ các đơn vị như giây và phút khỏi so sánh

 
 
 
8

Nếu không cung cấp dấu hiệu ngày tháng,

 
 
 
5 sẽ làm tròn xuống
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 đến đầu ngày mà nó đại diện

Các hàm liên quan đến ngày khác bao gồm MONTHS_BETWEEN, cho chênh lệch số nguyên theo tháng giữa hai loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4,
 
 
 
2, để có được loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 của ngày trong tuần tiếp theo khớp với một chuỗi ký tự [ví dụ:
 
 
 
4] và ROUND, tương tự như
 
 
 
5, nhưng

Xây dựng câu lệnh SQL bằng cách sử dụng ngày

Một số ví dụ đơn giản về việc sử dụng kiểu

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 trong câu lệnh SQL, sử dụng bảng "emp" [employees] [một phần dữ liệu mẫu đi kèm với bản cài đặt Oracle]. Cột "hiredate" của bảng "emp" lưu trữ các giá trị bằng cách sử dụng loại
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4

Định vị tất cả nhân viên được thuê giữa hai ngày

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 

Tìm tất cả nhân viên đã làm việc cho công ty hơn 15 năm, sử dụng kiểu INTERVAL được trả về từ hàm TO_YMINTERVAL

 
 SELECT
 *
 FROM
 emp
 WHERE
 SYSDATE - TO_YMINTERVAL['15-00'] > hiredate
 

Ngày và giờ trong PHP

Có thể tìm thấy danh sách tất cả các hàm khả dụng, dựa trên dấu thời gian UNIX, trong Hướng dẫn sử dụng PHP trong phần Hàm ngày và giờ. Trọng tâm ở đây sẽ là các hàm date[] và mktime[], thường là các hàm bạn sử dụng nhiều nhất. Lưu ý rằng phiên bản PHP 5. 1. x giới thiệu chức năng liên quan đến ngày bổ sung, trong khi các ví dụ ở đây tự giới hạn các hoạt động có sẵn trong các phiên bản PHP 4 trước đó. 3. x và 5. 0. x, mặc dù chúng cũng tương thích với PHP 5. 1. x

Nguyên liệu thô của ngày tháng và thời gian trong PHP là dấu thời gian UNIX; . 00. 00 UTC [GMT] vào ngày 1 tháng 1 năm 1970. Để xem dấu thời gian UNIX, chỉ cần in kết quả của hàm time[] của PHP;

________số 8

Để cộng trừ đơn vị ngày, giờ, phút, bạn chuyển đổi đơn vị sang giây và áp dụng trực tiếp vào dấu thời gian. Thực hiện phép tính số học sử dụng đơn vị tháng và năm yêu cầu hàm mktime[] [xem bên dưới]

Định dạng dấu thời gian UNIX. Hàm

 
 
 
0 được sử dụng để định dạng dấu thời gian UNIX

________số 8

Mặt nạ cho chức năng

 
 
 
0 có trong sách hướng dẫn. Bất kỳ ký tự nào mà
 
 
 
0 không nhận ra sẽ tự động được "chuyển qua" vào đầu ra, chẳng hạn như các ký tự dấu chấm câu. Ví dụ, các ký tự có thể bị nhầm với một phần của định dạng, có thể được thoát bằng dấu gạch chéo ngược

________số 8

Kết quả là "Thứ ba ngày 26 tháng 7. "

Ghi chú. Nếu bạn đặt mặt nạ định dạng bên trong dấu ngoặc kép, bạn có thể cần dấu gạch chéo ngược kép để thoát một số ký tự nhất định;

Hàm date[] cũng có thể hữu ích cho một số tính toán nhất định

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
3

Cũng lưu ý hàm gmdate[], hàm này gần như hoàn toàn giống với hàm date[] ngoại trừ việc nó chuyển đổi kết quả thành Giờ trung bình Greenwich [UTC]

Tạo và thao tác dấu thời gian UNIX. Hàm

 
 
 
3 được sử dụng để tạo dấu thời gian UNIX từ một ngày, các giá trị số nguyên đã cho đại diện cho các thành phần của ngày. Bạn có thể coi
 
 
 
3 là song song với hàm
 
 
 
5 của Oracle. Ví dụ

________số 8

Hàm

 
 
 
3 xử lý các điều chỉnh cần thiết khi ranh giới, chẳng hạn như ranh giới giữa các tháng bị vượt qua

________số 8

Ở đây, cố gắng đưa ra kết quả

 
 
 
3"ngày 37 tháng 7" để điều chỉnh chính xác thành tháng 8

Để tìm ngày cuối cùng của một tháng nhất định, bạn có thể sử dụng tháng tiếp theo cùng với giá trị 0 là ngày của tháng đó. Ví dụ

________số 8

Như với hàm

 
 
 
0, cũng có một hàm gmmktime[] cũng điều chỉnh theo GMT

Các vấn đề về ngày và giờ trong PHP. Một hạn chế của dấu thời gian UNIX là chúng bị ràng buộc với giới hạn 32 bit của CPU và hệ điều hành chính hiện nay. Điều đó có nghĩa là bạn chỉ có thể biểu thị một phạm vi ngày cho đến năm 2038 và trở lại năm 1902 trên nền tảng UNIX. Nếu giới hạn này gây ra sự cố cho ứng dụng của bạn, bạn có thể thấy thư viện PEAR Date là một giải pháp thay thế hữu ích, mặc dù chậm hơn.

Một lĩnh vực vấn đề khác là nội địa hóa; . Bạn có thể tìm thấy giải pháp thực tế đơn giản nhất, nếu bạn chỉ cần hỗ trợ một số ít ngôn ngữ, là dịch tên bằng cách sử dụng mảng kết hợp

Lưu ý rằng công việc đang được tiến hành để nâng cao các hàm ngày và giờ gốc của PHP. Bạn sẽ tìm thấy điều này được phác thảo bởi Derick Rethans, một trong những nhà phát triển cốt lõi của PHP, trong bài nói chuyện Xử lý thời gian PHP của anh ấy mà anh ấy đã trình bày tại ApacheCON 2005 ở Đức

Vẽ đường

Vì vậy, câu hỏi là bạn vẽ đường ở đâu?

Nói chung, cơ sở ngày của Oracle mạnh hơn của PHP, cho phép linh hoạt hơn khi phân tích chuỗi ngày hoặc định dạng đầu ra ngày, nhờ vào phạm vi mặt nạ định dạng ngày rộng hơn. Thêm vào đó là giới hạn 32 bit của dấu thời gian UNIX, rằng

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6 có thể lưu trữ các vấn đề về múi giờ và bản địa hóa và bạn có thể xem xét chuyển tất cả công việc liên quan đến ngày tháng cho Oracle. Cần phải chỉ ra rằng nhiều ứng dụng Web, đặc biệt là các ứng dụng mạng nội bộ, chỉ nhắm mục tiêu vào một khu vực địa phương duy nhất, do đó, hoạt động trong một ngôn ngữ và múi giờ duy nhất. Ngoài ra, phạm vi của dấu thời gian UNIX thường là quá đủ cho loại dữ liệu mà ứng dụng sẽ xử lý. Trong những trường hợp như vậy, các hàm ngày giờ của PHP sẽ không gây ra vấn đề gì

Lưu trữ ngày. Xem xét lưu trữ ngày và giờ, với một số cơ sở dữ liệu, có thể cần sử dụng dấu thời gian UNIX, chẳng hạn như SQLite tích hợp sẵn của PHP5. Với Oracle, tốt hơn là sử dụng

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 hoặc
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6 làm loại cột của bạn, để lưu trữ dữ liệu và giá trị thời gian. Chức năng hỗ trợ giúp thao tác ngày trở nên dễ dàng, đặc biệt khi
 
 SELECT
 *
 FROM
 emp
 WHERE
 SYSDATE - TO_YMINTERVAL['15-00'] > hiredate
 
8ing dựa trên
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4 và
 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
6. Bạn cũng sẽ thấy việc kiểm tra ngày bằng trực quan trở nên dễ dàng hơn nhiều, vì các công cụ như SQL*Plus tự động hiển thị ngày ở dạng con người có thể đọc được

định dạng ngày. Một lập luận chống lại các khả năng định dạng ngày của Oracle, khi nghĩ về kiến ​​trúc phân lớp, đó là định dạng đầu ra trong lớp lưu trữ dữ liệu của ứng dụng của bạn là "thực hành không tốt", đây là công việc của lớp trình bày

Nếu bạn đang ở vị trí [bất thường] khi viết một ứng dụng để chạy trên nhiều triển khai cơ sở dữ liệu, thì đây có thể là một đối số hợp lệ. Trong những trường hợp như vậy, bạn có thể muốn điều tra những gì John Lim đã cung cấp cho ADOdb để giúp giải quyết vấn đề này—hãy xem phần "Mẹo viết SQL di động", "Kiểu dữ liệu" của anh ấy

Thông thường hơn, bạn sẽ phát triển dựa trên một cơ sở dữ liệu duy nhất, vì vậy việc trừu tượng hóa nhà cung cấp sẽ không thành vấn đề. Bạn có thể muốn xem xét việc định dạng ngày của Oracle cho bạn theo nhiều cách khác nhau, thay vì cố gắng xoa bóp ngày trong PHP, như truy vấn sau gợi ý

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
0

Ngoài ra [hoặc ngoài ra], trả về dấu thời gian UNIX vì một phần của kết quả phù hợp độc đáo với hàm date[] của PHP [xem bên dưới]. Một số mặt nạ định dạng của Oracle, chẳng hạn như "Tháng", đệm đầu ra bằng các ký tự khoảng trắng nên việc sử dụng date[] trong những trường hợp như vậy có thể có nghĩa là ít dòng mã hơn

Chuyển đổi các loại Oracle DATE và Dấu thời gian Unix. Hai chức năng Oracle sau đây thực hiện điều này cho các loại

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4

Để chuyển đổi dấu thời gian UNIX thành loại Oracle

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
1

Tập lệnh PHP sau đây cho biết cách sử dụng tập lệnh này. Lưu ý rằng tập lệnh này yêu cầu PHP 5. x+, vì nó sử dụng tên chức năng mở rộng OCI mới

________số 8

Ngược lại, hàm sau trả về dấu thời gian UNIX được cung cấp loại Oracle

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
4

 
 SELECT
 ename, TO_CHAR[hiredate, 'ddth Mon, YYYY']
 FROM
 emp
 WHERE
 hiredate
 BETWEEN
 TO_DATE['1980-01-01','YYYY-MM-DD']
 AND
 TO_DATE['1985-01-01','YYYY-MM-DD']
 ORDER BY
 hiredate
 DESC
 Adding a new employee:
 INSERT INTO emp
 [
 empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 deptno
 ]
 VALUES
 [
 8002,
 'JOHNSON',
 'ANALYST',
 7566,
 TO_DATE['2005-07-22','YYYY-MM-DD'],
 3000,
 20
 ]
 
3

Giờ đây, thật dễ dàng để chuyển đổi dấu thời gian thành ngày được định dạng, sử dụng hàm

 
 
 
0 khi bạn lặp qua tập hợp kết quả

Phần kết luận

Bây giờ bạn đã được giới thiệu [hoặc được nhắc về] chức năng ngày giờ có sẵn trong cả Oracle và PHP. Bây giờ bạn đã có nền tảng để làm việc với ngày và giờ trong các ứng dụng Oracle/PHP của mình. Bạn cũng nên có một ý tưởng hợp lý về các quyết định thiết kế và triển khai mà bạn sẽ gặp phải khi xử lý ngày tháng

Harry Fuecks [ http. //www. phppotype. com] là một nhà phát triển và viết PHP nổi tiếng, kể từ khi khám phá ra PHP vào năm 1999. Ông đã xuất bản nhiều bài viết giới thiệu và trung cấp về PHP thông qua mạng của nhà phát triển Web Sitepoint, cũng như viết Tuyển tập PHP

Cách khai báo biến ngày tháng trong PHP?

sử dụng hàm date[] dựng sẵn . $myDate = date['m/d/Y']; . m là tháng có 2 chữ số, d là giá trị ngày có 2 chữ số và Y là giá trị năm có 4 chữ số.

Làm cách nào để đặt ngày trong PHP?

Tạo ngày từ chuỗi bằng strtotime[] . 00. 00 giờ GMT].

Loại ngày có phải là một chuỗi không?

Chuỗi định dạng ngày và giờ là một chuỗi văn bản được sử dụng để diễn giải các giá trị dữ liệu chứa thông tin ngày và giờ . Mỗi chuỗi định dạng bao gồm sự kết hợp của các định dạng từ một loại định dạng có sẵn. Một số ví dụ về các loại định dạng là ngày trong tuần, tháng, giờ và giây.

Làm cách nào để kiểm tra định dạng ngày trong PHP?

Hàm PHP checkdate[] var_dump[checkdate[2,29,2003]]; echo "
"; var_dump[checkdate[2,29,2004]];

Chủ Đề