Oracle so sánh thời gian ngày tháng

Oracle so sánh thời gian ngày tháng – Oracle compare date time

Trong quá trình sử dụng PL/SQL, ta thường xuyên phải xử lý thông tin liên quan đến thời gian ngày tháng. Một số việc liên quan đến ngày tháng trong Oracle như: insert dữ liệu vào bảng, tạo các view, cập nhật dữ liệu và tạo các báo cáo.Trong bài này tôi xin giới thiệu với các bạn một số cách trên Oracle dùng để so sánh thời gian ngày tháng.

Đối với Oracle, có kiểu dữ liệu liên quan đến ngày tháng (DateTime, Date, Timestamp) và hàm xử lý ngày tháng trong oracle (to_date(), trunc()…). Trong Oracle so sánh thời gian ngày tháng có hai cách đó là so sánh trực tiếp và gian tiếp.

So sánh thời gian ngày tháng trực tiếp

Trong Oracle, kiểu dữ liệu về thời gian ngày tháng cơ bản như dạng kiểu số nên ta có thể thao tác tính toán và so sánh như dữ liệu kiểu số (number) như bình thường. Việc so sánh này do các toán tử như lớn hơn, nhỏ hơn, bằng… giữa các dữ liệu.

Sử dụng các toán tử này có ưu điểm là không bị mất Index trên trường dữ liệu muốn so sánh nên việc so sánh thường rất là nhanh chóng và tối ưu.

Ngược lại vì kiểu ngày tháng như kiểu số nên rất chính xác nhưng kiểu ngày tháng rất phụ thuộc vào kiểu dữ liệu. Kiểu dữ liệu ngày tháng ta định nghĩa như Date, DateTime, Timestamp thường phân bậc năm – tháng – ngày – giờ – phút – giây… nên đôi lúc rất dễ nhầm lẫn khi ta so sánh mà không nắm chắc kiểu dữ liệu. Ví dụ như lấy dữ liệu của ngày hôm nay mà kiểu dữ liệu lưu là DateTime thì phải lấy dữ liệu lớn hơn hôm qua và nhỏ hơn hôm nay mới đủ. Để khắc phục điều này ta phải dùng đến hàm trunc() để làm tròn các thông tin ngày tháng để tiện so sánh và chính xác. Ta có thể tham khảo hàm trunc() với nhiều tham số như: trunc(), trunc(sysdate,’month’), trunc(sysdate, ‘year’)…

So sánh thời gian ngày tháng gián tiếp

Như đã nói ở trên, việc so sánh thời gian ngày tháng trực tiếp đôi lúc gặp một số lỗi nhất định do sơ suất. Để khắc phục điều này và làm tăng tính trực quan khi nhìn câu lệnh SQL ta có thể để Oracle so sánh thời gian một cách gián tiếp. Cũng giống như việc làm tròn dữ liệu, ta có thể chuyển đổi dữ liệu ngày tháng về cùng một định dạng khác rồi dùng chúng như một cách gián tiếp để so sánh. Ở đây tôi thường sử dụng việc chuyển đổi dữ liệu về kiểu NVARCHAR để tiến hành xử lý. Việc chuyển đổi này có nhiều điểm lợi ích ở trên nhưng có 1 nhược điểm quan trọng đó là khi sử dụng hàm to_char() để chuyển đổi ta đã vô tình làm mất Index của dữ liệu. Điều này đối với các bảng dữ liệu có lượng record lớn sẽ làm mất Index sẽ làm làm chậm hệ thống, nhưng với những lệnh SQL đơn giản thì vẫn rất thuận tiện và cần thiết. Sau đây là một số hàm so sánh bằng cách gián tiếp này:

– So sánh ngày:

Ta tiến hành convert dữ liệu dạng ngày sang kiểu string và tiến hành so sánh:

ví dụ:
Cần lấy ngày tạo lớn hơn hoặc bằng ngày 06/04/2018

AND TO_CHAR(datecreate, ‘YYYYMMDD’) >= ‘20180406’

Hoặc trong một khoảng ngày:

Cách 1:

AND TO_CHAR(datecreate, ‘YYYYMMDD’) >= ‘20180406’
AND TO_CHAR(datecreate, ‘YYYYMMDD’) < ‘20180411’

Cách 2:

AND TO_CHAR(datecreate, ‘YYYYMMDD’) between ‘20180406’ and ‘20180410’

– So sánh ngày chi tiết tới thời gian:

Ta tiến hành convert dữ liệu dạng ngày sang kiểu string và tiến hành so sánh:

ví dụ:

Cần lấy ngày tạo lớn hơn hoặc bằng 7h tối ngày 06/04/2018:

AND TO_CHAR(laa.datcre, ‘YYYYMMDD HH24:MI:SS’) >= ‘20180406 19:00:00’

Hoặc trong một khoảng thời gian:

Cách 1:

and TO_CHAR(laa.datcre, ‘YYYYMMDD HH24:MI:SS’) >= ‘20180406 19:00:00’
and TO_CHAR(laa.datcre, ‘YYYYMMDD HH24:MI:SS’) < ‘20180407 00:00:01’

Cách 2:

and TO_CHAR(laa.datcre, ‘YYYYMMDD HH24:MI:SS’) between ‘20180406 19:00:00’ and ‘20180407 00:00:00’

Có thể bạn quan tâm:

COBIT và ITIL

COBIT và ITIL

Nay đi học về môn Quản lý hệ thống thông tin mới biết được khái niệm Cobit và ITL, note tạm ở đây để nghiên cứu sau.

Điểm chung: Đây đều là 2 chuẩn – standard hay còn gọi là freamword để quản lý dành riêng về lĩnh vục IT. Nó cũng như ISO vậy. Chỉ là quy chuẩn chứ không phải là một phần mềm cụ thể nào.

Điểm riêng:

  • Cobit: Cái này thì dành cho SEO, các nhà quản lý cấp cao. Quản lý việc phát triển hệ thống thông tin của công ty.
  • ITIL: Cái này thì dành cho nhân viên, nghĩa là làm như thế nào. Khái niệm này cũng giống như là IT of service, triển khai IT như là một dịch vụ. Cái này là đầu vào và đầu ra giữa bộ phận IT và các bộ phận khác như: khách hàng, phòng ban khác sử dụng dịch vụ của IT.

Một số phần mềm ITIL mà mình biết như sau: ITIL (VTVCab), JIRA (K+, anh Giang…)

 

Một công ty lên sàn chứng khoán hoặc được định giá thì việc kiểm toán bao gồm cả năng lực quản lý hệ thống IT vì dần dần IT sẽ đều là xương sống của doanh nghiệp do nó chứa toàn bộ thông tin của doanh nghiệp.

ISO: là quy chuẩn chung để cho tất cả mọi người có thể làm việc được với nhau. Đối tác Nhật Bản rất coi trọng việc sử dụng ISO trong doanh nghiệp cũng như trường học.

Phân cụm Websites với K-MEANS

Phân cụm Websites với K-MEANS

 

1.Thuật toán K-MEANS

Thuật toán K-MEANS thuộc nhóm các phương pháp phân cụm dựa vào cụm trung tâm. Thuật toán K-MEANS trong quá trình học không cần giám sát, nghĩa là trước khi chạy không định sẵn các kết quả trả về. Quá trình học, cập nhật và chạy có thể diễn ra đồng thời.Mục tiêu của thuật toán là phân chia tập dữ liệu có sẵn thành k cụm khác nhau với số là số cho trước. Đối với dữ liệu mới cần phân cụm có thể chạy lại thuật toán từ đầu để phân cụm được kết quả tốt nhất, điều này gây mất thời gian do thuật toán sử dụng việc lặp các thao tác tìm cụm trung tâm và tính khoảng cách giữa cụm trung tâm và các phần tử. Trên thực tế, quá trình xác định dữ liệu mới sẽ được phân vào các cụm nào người ta thường dựa trên khoảng cách từ dữ liệu mới tới các cụm trung tâm của lần phân cụm cuối cùng. Sau một khoảng thời gian định trước hoặc số lượng tới hạn dữ liệu mới được thêm, thuật toán K-MEANS sẽ được chạy lại để tăng độ chính xác các cụm.Thuật toán K-Means hoạt động dựa vào các bước xử lý theo trình tự:

Bước 1: Cho dữ liệu đầu vào là một tập S gồm M điểm (mỗi điểm là một phần tử có N thuộc tính, hay có thể gọi là một vector N chiều), và giá trị K (số cụm).

Bước 2: Với mỗi cụm trong K cụm ta cần có một điểm trung tâm, vì vậy ta cần khởi tạo giá trị cho K điểm ngẫu nhiên, mỗi điểm cùng có N thuộc tính và giá trị nằm trong khoảng biên giá trị tương ứng với thuộc tính đó của tập dữ liệu được cho. Đôi khi người ta chỉ đơn giản là chọn ngẫu nhiên K điểm trung tâm từ trong số các điểm dữ liệu thuộc tập được cho.

Bước 3: Lần lượt kiểm tra và nhóm mỗi điểm trong tập S vào một trong K nhóm mà nó gần nhất (dựa vào sự tương đồng, hay khoảng cách) với điểm trung tâm của nhóm đó. Có rất nhiều dạng khoảng cách hay độ tương đồng có thể được sử dụng, trong đó phổ biến nhất có lẽ là khoảng cách Euclid.

Bước 4: Cập nhật lại điểm trung tâm của mỗi nhóm bằng giá trị trung bình của tập điểm trong mỗi nhóm.

Bước 5: Lặp lại bước 3 và bước 4 cho đến khi giá trị điểm trung tâm không còn thay đổi hoặc sự thay đổi của giá trị điểm trung tâm giữa 2 lần chạy đạt một giá trị epsilon (e) cho trước. Khi đó thuật toán kết thúc, tập dữ liệu đã được phân vào K cụm, mỗi cụm có một điểm trung tâm xác định.

Để việc phân cụm được chính xác và tốc độ phân cụm được nhanh, người ta có thể kết hợp một hoặc nhiều cải tiến sau để nâng cao hiệu quả của thuật toán K-MEANS:

+ Sử dụng K số cụm phù hợp đảm bảo tốc độ và số cụm được phân

+ Chuẩn hóa dữ liệu trước khi phân cụm

+ Chọn các điểm trung tâm ban đầu và số epxilon phù hợp

+ Sử dụng công thức tính độ tương đồng hoặc khoảng cách giữa 2 điểm dữ liệu phù hợp

 

2.Ứng dụng thuật toán K-MEANS trong phân cụm website

Đối với bài toán phân cụm Website, thuật toán K-MEANS là ứng cử viên hàng đầu để giải bởi tính đơn giản, dễ cài đặt của thuật toán và đặc thù của website là sự phức tạp của dữ liệu. Có nhiều hướng tiếp cận bài toán với thuật toán K-MEANS, sau đây là hướng tiếp cận cơ bản được nhiều nhà nghiên cứu sử dụng:

+ Đối với mỗi website được coi là một điểm dữ liệu, tập dữ liệu M chính là tập các website cần phân cụm.

+ Số thuộc tính (N) của một điểm dữ liệu là tập hợp danh sách các từ khóa, các từ khóa này được lấy có thể dựa vào thuật toán trích trọn đặc trưng từ trang, danh sách các thẻ được gắn, các từ khóa trong thẻ metadata…

+ Để tính khoảng cách giữa các điểm dữ liệu ta có thể sử dụng hoặc sự kết hợp giữa các phương pháp sau: độ tương tự giữa từ với từ, sử dụng độ đo Cosin, lập từ điển từ khoá…

+ Lựa chọn các website lớn làm các điểm trung tâm ban đầu thay vì việc lựa chọn ngẫu nhiên.

 

3.Khó khăn trong sử dụng K-MEANS để phân cụm website

Trong phân cụm Website, K-means là một lựa chọn tốt nhưng cũng có một số điểm hạn chế cũng như khó khăn nhất trong việc triển khai thực tế như sau:

+ Dữ liệu trên các website ngày càng đa dạng, việc trích lấy danh sách các từ khóa cũng là một chủ đề lớn cần nghiên cứu. Ví dụ việc lấy thông tin từ khóa từ các website chuyên về ảnh, video, âm thanh…

+ Số lượng các website ngày càng lớn, việc chạy thuật toán lặp nhiều lần là cả một vấn đề. Cần đưa ra những chiến lược mới về việc lựa chọn phương pháp đo khoảng cách hiệu quả, áp dụng các thuật toán chạy song song…

+ Một số các website là các trang tin tức nhiều chủ đề, các website mạng xã hội… cần nghiên cứu loại bỏ hoặc sắp xếp sau do những trang này có thể sẽ thuộc vào nhiều cụm sẽ làm thuật toán chạy chậm và kém hiệu quả.

+ Các website ngày càng phát triển nhiều về nội dung đồng nghĩa với việc sẽ có nhiều chủ đề dẫn tới việc phân chia thành các cụm phẳng (đồng mức) làm tăng số cụm. Việc này sẽ không hiệu quả trong thực tế, cần phải nghiên cứu việc phân cụm theo từng mức.