Professional Documents
Culture Documents
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
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
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
Đô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 )
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
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()
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 đề
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
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
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
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
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’
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ữ
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
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.
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
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.
Hàm sẽ trả về một số từ 0 đến 1 ( từ không khớp đến khớp hoàn hảo)