Định dạng SQL
Đính kèm một câu lệnh SQL một dòng được sao chép từ nhật ký hoặc từ một ORM; công cụ định dạng sẽ phân tách câu lệnh thành các đoạn có indent, đảm bảo chữ viết của các từ khóa nhất quán, đặt dòng mới trước các tên SELECT, FROM, WHERE, GROUP BY, và căn chỉnh các cột trong kết quả chiếu. Công cụ hỗ trợ các ngôn ngữ lập trình tương thích với MySQL, PostgreSQL, SQL Server, Oracle, SQLite và BigQuery – mỗi ngôn ngữ đều sử dụng một số từ khóa và từ dự trữ khác nhau.
Cách thức định dạng hoạt động như thế nào
-
1
Dán đoạn SQL của bạn
Đối tượng dạng khối đơn dòng, kết quả đầu ra được rút gọn từ Hibernate hoặc các nguồn tương tự; tất cả các câu lệnh được phân tách bởi ký hiệu `;` đều đã được định dạng đúng cách.
-
2
Chọn phương ngữ và phong cách
Phương ngữ kiểm soát danh sách từ khóa; phong cách kiểm soát vị trí dấu phẩy (đầu hoặc cuối câu), độ rộng lối viết và việc sử dụng chữ hoa hay chữ thường cho các từ khóa.
-
3
Các token được phân tích, chứ không bị thay thế bằng regex.
Bộ phân tích ký tự xử lý các chuỗi văn bản, chú thích, dấu ngoặc và các truy vấn con một cách chính xác; các giá trị văn bản được giữ nguyên như trong văn bản gốc.
-
4
Sao chép kết quả đã định dạng
SQL đã được xác thực, cùng ý nghĩa ngữ nghĩa, bố cục gọn gàng hơn.
Trước và sau
Trước đó:
SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;
Sau đó (dấu phẩy chính, các từ khóa viết hoa, lồng dòng 2 khoảng trắng):
SELECT
u.id
, u.name
, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;
Các lựa chọn phong cách quan trọng
- Từ khóa viết hoa so với từ khóa viết thường: Viết hoa là cách truyền thống và dễ được máy đọc hiểu; viết thường lại gọn gàng hơn trong các trình soạn mã hiện đại có chức năng làm nổi bật cú pháp.
- Dấu phẩy đặt đầu và dấu phẩy đặt cuối: Dấu phẩy đặt đầu (
, col) giúp việc ghi chú cho một cột đơn lẻ trở nên dễ dàng hơn; trong khi đó, dấu phẩy đặt cuối (col,) đọc tự nhiên hơn trong văn bản. - Vị trí dấu phẩy trong
GROUP BY: thường dùng một dấu phẩy mỗi dòng cho các mệnh đề dài, viết trên cùng một dòng (inline) cho các mệnh đề ngắn. - Thụt lề JOIN: đặt
ONở dòng tiếp theo (thụt lề treo) hay trên cùng một dòng. Các điều kiện dài sẽ phù hợp hơn với cách thụt lề treo. - Các truy vấn con: Nhấn lồng toàn bộ nội dung của truy vấn con, chứ không chỉ phần khung ngoặc mở đầu.
Những vấn đề thường gặp đặc thù cho từng phương ngữ
- Dấu backtick trong MySQL so với dấu nháy kép trong PostgreSQL dùng cho các định danh.
- Các CTE
WITH: MS SQL yêu cầu sử dụng;trước khi sử dụngWITH; bộ định dạng sẽ xử lý điều này. - Hàm cửa sổ (window functions): các mệnh đề
OVER (...)dài sẽ dễ đọc hơn khiPARTITION BYvàORDER BYđược ngắt xuống nhiều dòng. - BigQuery sử dụng các định danh
ARRAY_AGG,STRUCTvà các hậu tố bảng (*_yyyymmdd), và bộ phân tích ký tự không được phép phá vỡ những định danh này. - Oracle sử dụng cú pháp nối bên ngoài
(+); trình định dạng sẽ giữ nguyên cú pháp này nhưng ghi chú rằng đây là cú pháp cũ.
Những điều mà công cụ định dạng không thực hiện
- Sửa lỗi: Một truy vấn JOIN không hợp lệ sẽ vẫn không thể thực hiện được.
- Mở rộng
SELECT *: Danh sách các cột không được suy ra từ sơ đồ dữ liệu. - Tối ưu hóa truy vấn: chỉ sắp xếp bố cục, không liên quan đến kế hoạch thực thi.
- Viết lại các truy vấn con thành CTE: đây là một vấn đề khác.
Câu hỏi thường gặp
Không, điều này hoàn toàn mang tính thẩm mỹ. Khoảng trắng, dòng mới và vị trí dấu phẩy có thể thay đổi, nhưng các từ khóa, toán tử, giá trị literal và định danh đều được giữ nguyên một cách chính xác.
Được hỗ trợ: CREATE TABLE, ALTER, CREATE PROCEDURE và trigger. Bộ định dạng xử lý cấu trúc khối (BEGIN ... END) cũng như việc nối tiếp dòng bên trong các thủ tục.
Điều này không nên xảy ra; nếu đã xảy ra, rất có thể là do sự không tương thích giữa các phương ngữ. Hãy thử thay đổi phương ngữ. Vui lòng báo cáo các lỗi kéo dài; chúng sẽ được coi là lỗi phần mềm.
Flink SQL và Cassandra CQL có vẻ ngoài tương tự nhau, nhưng mỗi công cụ sử dụng các từ khóa đặc thù cho ngôn ngữ riêng, mà các công cụ định dạng phổ biến thường làm sai lệch chúng. Hãy sử dụng với thận trọng và kiểm tra xem kết quả đầu ra có chạy thành công hay không.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Trình giải mã mã JavaScript (JavaScript Deobfuscator)
Giải mã mã JavaScript đã được rút gọn hoặc nén bằng cách đổi tên biến, giải mã chuỗi và mảng, đảo ngược cấu trúc dòng điều khiển và làm đẹp mã.
Chuyển đổi HTML sang BBCode
Chuyển đổi các đoạn mã HTML thành BBCode dành cho phpBB, vBulletin và các phần mềm diễn đàn khác không hỗ trợ định dạng HTML thô.
Trình chuyển ASCII sang Hex
Biến văn bản ASCII thành giá trị byte thập lục phân. Đầu ra dùng hai chữ số hex cho mỗi ký tự, sẵn sàng cho memory dump, packet trace hoặc bảng firmware.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Formateador SQL [ES]
- تنسيق SQL [AR]
- SQLフォーマッター [JA]
- Formateur SQL [FR]
- Formatador SQL [PT]
- SQL-formaterare [SV]
- SQL 포매터 [KO]
- Format SQL [ID]
- SQL-Formatter [DE]
- SQL-formatter [NL]
- รูปแบบ SQL [TH]
- Formater SQL [PL]
- Форматтер SQL [RU]
- SQL Biçimlendirici [TR]
- SQL 格式化器 [ZH]
- SQL Formatter [EN]
- Formatter SQL [IT]