You are on page 1of 16

Overview of basic arithmetic

operators
CỘNG TRỪ DỮ LIỆU KIỂU NGÀY THÁNG

Khi trừ các giá trị ngày, kết quả trả về là một kiểu dữ liệu số nguyên

Ta cũng có thể cộng số nguyên vào kiểu dữ liệu ngày tháng

Khi cộng số nguyên vào giá trị ngày, độ chính xác ngụ ý là ngày
Tuy nhiên, khi thực hiện thao tác tương tự trên dữ liệu TIMESTAMP thì kết quả nhận được
là INTERVAL

TÍNH TOÁN KHOẢNG THỜI GIAN VỚI AGE


Hàm AGE cho phép tính toán sự khác biệt giữa hai mốc thời gian
Hàm AGE nhận hai đối số dấu thời gian và trừ đi đối số đầu tiên từ đối số thứ hai và kết quả
là INTERVAL

TOÁN TỬ NGÀY/ GIỜ SỬ DỤNG INTERVALs


Sử dụng INTERVAL là một kỹ thuật tuyệt vời khi cần hoàn thành các phép tính ngày và giờ
tương đối

Functions for retrieving current


date/time/Hàm truy xuất ngày giờ
hiện tại/
Retrieving the current timestamp/Truy xuất dấu thời gian hiện tại/
NOW() cho phép bạn truy xuất giá trị Dấu thời gian cho ngày và giờ hiện tại ở độ chính xác
micro giây với múi giờ

NOW() :: timestamp : Truy xuất dấu thời gian mà không có múi giờ
Toán tử “::” Truyền dữ liệu là loại mới (sau dấu “::”) /Chỉ dành riêng cho Postgre SQL/

CAST()
Truyền cho phép chuyển đổi một kiểu dữ liệu này sao kiểu dữ liệu khác sao cho các cột được
lưu trữ trong CSDL có thể được truy vấn và xuất ra dưới dạng một kiểu khác

Hàm CURRENT_TIMESTAMP trả về cùng một kết quả hàm NOW()


Điểm khác biệt giữa CURRENT_TIMESTAMP và NOW() là:
Với CURRENT_TIMESTAMP bạn có thể chỉ định một thông số chính xác (số thập phân)

Đôi khi ta chỉ muốn lấy ngày hoặc giờ hiện tại nhưng không yêu cầu độ chính xác của thời
gian ta có thể dùng CURRENT_DATE hoặc CURRENT_TIME
Extracting and transforming date/
time data /Trích xuất và chuyển đổi
dữ liệu ngày giờ/
Các hàm EXTRACT, DATE_PART và DATE_TRUNC để thao tác dữ liệu dấu thời gian và tạo
các cột mới bằng cách trích xuất các trường con từ các giá trị ngày và giờ hiện có
Loại thao tác dữ liệu này hữu ích khi độ chính xác của Dấu thời gian không hữu ích cho phân
tích (VD : ta cần ngày. Tháng , thứ,… của một dấu thời gian )

Extracting and transforming date / time data


EXTRACT ( field FROM source)

DATE_PART(‘field’,source)

Tham số source cần phải là kiểu dữ liệu dấu thời gian, thời gian hoặc khoảng thời gian hợp lệ

Ở đây, ta thấy một kỹ thuật với mệnh đề GROUP BY cho phép chỉ định các trường trong
mệnh đề SELECT bằng cách sử dụng tham chiếu số

Truncating timestamps using DATE_TRUNC() /Cắt bớt dấu thời gian bằng
DATE_TRUNC()/
DATE_TRUNC() sẽ cắt ngắn dấu thời gian hoặc khoảng thời gian kiểu dữ liệu để trả về dấu
thời gian hoặc khoảng thời gian ở một độ chính xác được chỉ định
Các giá trị độ chính xác là một tập hợp con của các số nhận dạng trường có thể được sử
dụng với các hàm EXTRACT() và DATE_PART()
Reformatting string and character
data
The string concatenation operator/Toán tử nối chuỗi/

Nối chuỗi cho phép hợp nhất hai hoặc nhiều chuỗi

String concatenation with functions/Nối chuỗi với các hàm/

CONCAT() chấp nhận một hoặc nhiều tham số và trả về kết quả là chuỗi được nối
Mỗi tham số có thể là một cột từ CSDL hoặc một giá trị bằng chữ được phân tách bằng dấu
phẩy
String concatenation with a non-string in…

Postgre SQL cho phép nối cả dữ liệu chuỗi và không phải chuỗi

Dữ liệu không phải là chuỗi có thể được nối với || cũng như hàm CONCAT()

Changing the case of string/Thay đổi kiểu chữ của chuỗi/

Hàm UPPER cho phép định dạng lại một chuỗi để thay đổi mỗi kí tự thành chữ hoa tương
đương của nó

UPPER chấp nhận một chuỗi làm tham số và trả về chuỗi đó bằng tất cả chữ hoa
Chuyển đổi dữ liệu chuỗi sẽ hữu ích khi chuẩn hóa và làm sạch các tập dữ liệu

Hàm LOWER tương tự như hàm UPPER nhưng thay vào đó chuyển đổi chuỗi thành chữ
thường
Tương tự, hàm INITCAP sẽ chuyển đổi một chuỗi thành chữ hoa tiêu đề

Replacing characters in a string/Thay thế các ký tự trong chuỗi/


Hàm REPLACE sẽ tìm một chuỗi con trong một chuỗi và thay thế nó bằng một chuỗi con
khác
Hàm REPLACE nhận ba tham số
1. Chuỗi nguồn mà bạn muốn thao tác
2. Chuỗi con bạn muốn tìm trong chuỗi nguồn
3. Chuỗi thay thế

Manipulating string data with REVERSE/Thao tác dữ liệu chuỗi với REVERSE/

Hàm REVERSE chấp nhận một chuỗi làm tham số duy nhất của nó và trả về cùng một chuỗi
với thứ tự ngược lại
Parsing string and character data
/Phân tích dữ liệu chuỗi và ký tự/
Determining the length of a string
Hàm CHAR_LENGTH có thể được sử dụng để xác định số ký tự trong một chuỗi
CHAR_LENGTH chấp nhận một chuỗi làm đầu vào và trả về số ký tự trong chuỗi dưới dạng
số nguyên cho đầu ra

LENGTH tương tự như CHAR_LENGTH

Finding the position of a character in a string

Hàm POSITION trả về một số nguyên đại diện cho số ký tự từ trái sang phải trước chuỗi tìm
kiếm/thứ tự của ký tự từ trái sang phải/
STRPOS tương tự như POSITION với cú pháp hơi khác

Parsing string data/Phân tích dữ liệu chuỗi/


Hàm LEFT cho phép trích xuất “n” ký tự đầu tiên của một chuỗi

Hàm RIGHT giống hàm LEFT nhưng nó trích xuất “n” ký tự cuối cùng của một chuỗi

Extracting substrings of character data/Trích xuất chuỗi con của dữ liệu ký tự/
SUBSTRING cho phép trích xuất một chuỗi con từ dữ liệu văn bản
Hàm SUBSTRING nhận ba tham số:
1. Chuỗi hoặc cột nguồn
2. Số nguyên đại diện cho vị trí bắt đầu trong chuỗi nguồn
3. Số nguyên để chỉ định độ dài của chuỗi con muốn trích xuất

SUBSTRING có thể được kết hợp với các hàm khác để cung cấp các khả năng bổ sung
Một kỹ thuật khác

SUBSTR tương tự như SUBSTRING nhưng chỉ cho phép các tham số được phân tách bởi
dấu phẩy và không cho phép sử dụng cú pháp thay thế với các từ khóa FROM và FOR

Truncating and padding string data


/Cắt bớt và đệm dữ liệu chuỗi/
Removing whitespace from strings
Hàm TRIM sẽ xóa các ký tự ở đầu hoặc cuối chuỗi hoặc cả hai và chấp nhận ba tham số:
1. (Tùy chọn) Chỉ định xem bạn muốn xóa ký tự ở đầu hay cuối chuỗi hay cả hai /Nếu tham
số này bị bỏ qua, giá trị mặc định là cả hai/
2. (Tùy chọn) Chỉ định các ký tự cần xóa khỏi chuỗi /Nếu tham số này bị bỏ qua giá trị mặc
định là khoảng trống/
3. Chuỗi mà bạn muốn cắt bớt
Các hàm LTRIM và RTRIM tương tự như TRIM nhưng chỉ xóa các ký tự ở ĐẦU hoặc CUỐI
chuỗi chứ không phải cả hai

Padding strings with character data/Chuỗi đệm với dữ liệu ký tự/

Hàm LPAD nối thêm một ký tự hoặc chuỗi vào một chuỗi khác theo số lượng ký tự được chỉ
định. Gồm ba tham số 1. Chuỗi , 2. Độ dài chuỗi trả về, 3. Kí tự đệm

Padding strings with whitespace

Nếu bỏ qua tham số thứ ba trong hàm LPAD, chuỗi sẽ được đệm bằng ký tự khoảng trắng
theo mặc định
Và tham số độ dài nhỏ hơn độ dài của chuỗi ban đầu thì kết quả trả về sẽ bị cắt bớt

HÀM RPAD tương tự như LPAD nhưng sẽ chèn chuỗi ký tự ở bên phải
Introduction to full-text search
What is full-text search?
Full-text search là thực hiện các truy vấn ngôn ngữ tự nhiên của dữ liệu văn bản bằng cách
sử dụng kết hợp chuỗi gốc, đối sánh chuỗi mờ để xử lý lỗi chính tả và cơ chế xếp hạng
kết quả theo mức độ tương tự với chuỗi tìm kiếm
/Full text search provides a means for performing natural language queries of text data
by using stemming, fuzzy string matching to handle spelling mistakes and a
mechanism to rank results by similarity to the search string./

Mệnh đề WHERE của truy vấn sử dụng toán tử so khớp để so sánh các giá trị được trả về
bởi hai hàm tích hợp để thực hiện tìm kiếm, to_tsvector và to_tsquery
Các hàm này chuyển đổi dữ liệu văn bản và chuỗi thành kiểu dữ liệu tsvector (là danh sách
sắp xếp các từ đã được chuẩn hóa thành các biến thể của cùng một từ). Những biến thể này
được gọi là ‘lexemes’

LIKE versus full-text search


Toán tử LIKE phân biệt về chữ hoa và chữ thường nên không bao quát = full-text search

Extending PostgreSQL
User-defined data types/Các kiểu dữ liệu tùy chỉnh do người dùng xác định/

Kiểu dữ liệu do người dùng xác định được tạo bằng lệnh CREAT TYPE để đăng ký kiểu dữ
liệu đó trong bảng hệ thống và làm cho nó có sẵn để sử dụng ở bất cứ nơi nào PostgreSQL
yêu cầu tên kiểu

Kiểu dữ liệu Enumerated hay Enums cho phép bạn xác định danh sách tùy chỉnh các giá trị
sẽ không bao giờ thay đổi chẳng hạn như ngày trong tuần (dayofweek hay dow)
Getting information about user-defined data types

Khi dữ liệu tùy chỉnh đã được tạo, bạn có thể truy vấn bảng hệ thống có tên pg_type để lấy
thông tin về tất cả các kiểu dữ liệu có sẵn trong CSDL của bạn do cả người dùng xác định và
tích hợp sẵn.
Trong truy vấn này,bạn có thể lấy tên của kiểu dữ liệu bằng cột typname và danh mục của
kiểu dữ liệu bằng cột typcategory.
VD: Kết quả của truy vấn trả về dayofweek cho tên của loại dữ liệu mà chúng ta vừa tạo và E
cho danh mục trong đó E đại diện cho loại ENUM.

Ta cũng có thể sử dụng CSDL hệ thống INFORMATION_SCHEMA để lấy thông tin về các
loại dữ liệu do người dùng xác định
VD: Nếu truy vấn INFORMATION_SCHEMA.COLUMNS và xem xét cụ thể các cột trong
bảng film, ta sẽ nhận thấy rằng hạng column_name là loại dữ liệu ĐƯỢC XÁC ĐỊNH BỞI
NGƯỜI DÙNG với udt_name là mpaa_rating.
Cột udt_name cho kiểu dữ liệu do người dùng xác định chứa các giá trị của tên được cung
cấp khi tạo kiểu dữ liệu bằng lệnh CREAT TYPE
User-defined functions

Hàm do người dùng xác định trong PostgreSQL tương đương với một thủ tục được lưu trữ
trong đó bạn có thể nhóm một số truy vấn và câu lệnh SQL lại với nhau thành một gói duy
nhất bằng cách sử dụng CREAT FUNCTION

VD: Ta xác định hàm bình phương chấp nhận một số nguyên I làm tham số ban đầu và trả
về bình phương của tham số đó làm kết quả. Cú pháp ký hiệu $$ chỉ định rằng hàm sẽ sử
dụng SQL làm ngôn ngữ

VD: Trong dataset mẫu Sakila có


Hàm get_customer_balance(customer_id,effective_data): Lấy một customer_id và một dấu
thời gian làm tham số đầu vào và sẽ tính toán số dư hiện tại của khách hàng dựa trên
customer_id kể từ ngày dấu thời gian

Hàm inventory_held_by_customer(inventory_id) lấy inventory_id làm tham số đầu vào và sẽ


xác định tất cả các hàng có return_date bằng null, nghĩa là khách hàng vẫn còn thuê

Hàm inventory_in_stock(inventory_id) lấy inventory_id làm đầu vào và xác định xem hàng có
đang trong kho cụ thể hay không

Intro to PostgreSQL extensions


Intro to PostgreSQL extensions

Hầu hết các bản phân phối PostgreSQL đều đi kèm với một tập hợp chung các tiện ích mở
rộng được hỗ trợ và sử dụng rộng rãi từ cộng đồng mà bạn có thể sử dụng chỉ bằng cách
kích hoạt chúng.

Các tiện ích mở rộng phổ biến


PostGIS bổ sung hỗ trợ cho phép chạy truy vấn vị trí trong SQL
PostPic cho phép xử lý hình ảnh trong CSDL
fuzzystrmatch và pg_trgm cung cấp các chức năng mở rộng khả năng Full-text search bằng
cách tìm điểm tương đồng giữa các chuỗi
Querying extension meta data
Để giúp xem những tiện ích mở rộng nào có sẵn trong bản phân phối PostgreSQL của mình,
ta có thể truy vấn chế độ xem hệ thống pg_available_extensions

Một truy vấn tương tự của bảng hệ thống pg_extension sẽ cho biết phần tiện ích mở rộng nào đã
được kích hoạt trong CSDL và có sẵn để sử dụng

Loading extensions into your database

Bất kỳ tiện ích mở rộng nào được trả về từ pg_available_extensions đều có thể được tải vào CSDL và
được bật bằng một truy vấn đơn giản bằng cách sử dụng lệnh CREATE EXTENSION
Các lệnh IF NOT EXISTS có thể được sử dụng để đảm bảo rằng nếu tiện ích mở rộng đã được kích hoạt
trước đó thì truy vấn sẽ không tạo ra thông báo lỗi
Using fuzzystrmatch or fuzzy searching

Khi thực hiện full-text search dựa trên thông tin đầu vào của người dùng hoặc muốn thực hiện phân
tích và so sánh dữ liệu văn bản trong việc luyện tập Xử lý ngôn ngữ tự nhiên(Natural language
processing), một hàm sẽ được sử dụng thường xuyên là levenshtein từ tiện ích mở rộng
fuzzystrmatch

Hàm levenshtein tính toán khoảng cách levenshtein giữa hai chuỗi, đây là số lần chỉnh sửa cần thiết
để các chuỗi khớp hoàn hảo
VD: bạn thấy khoảng cách được trả về là 2 vì để chuyển đổi GUMBO thành GAMBOL, cần phải thay
chữ U bằng chữ A và thêm chữ L vào cuối từ hoặc hai lần chỉnh sửa.

Compare two strings with pg_trgm


Tiện ích mở rộng pg_trgm cung cấp các hàm và toán tử để xác định sự giống nhau của hai chuỗi bằng
cách sử dụng kết quả khớp Trigram
Trigram là một tập hợp gồm 3 ký tự liên tiếp được lấy ra từ một chuỗi
Và dựa vào số lượng Triagram trùng khớp trong hai chuỗi sẽ đưa ra thước đo mức độ giống nhau
của chúng. Phép đo này có thể được tính bằng cách sử dụng tính năng tương tự của tiện ích mở
rộng này.
Hàm similarity chấp nhận 2 tham số:
1. Chuỗi bạn muốn so sánh
2. Chuỗi thứ hai muốn so sánh với

Hàm sẽ trả về một số từ 0 đến 1 ( từ không khớp đến khớp hoàn hảo)

You might also like