รูปแบบ SQL
ให้วางคำสั่ง SQL แบบบรรทัดเดียวที่คัดลอกมาจากไฟล์บันทึกหรือ ORM โดยโปรแกรมจัดรูปแบบจะแยกคำสั่งออกเป็นข้อความที่มีการแทรกช่องว่างตามลำดับ พร้อมรักษารูปแบบตัวอักษรของคำสำคัญให้เหมือนกัน แทรกบรรทัดใหม่ก่อนคำ SELECT, FROM, WHERE และ GROUP BY และจัดเรียงคอลัมน์ให้อยู่ในแนวเดียวกันในการแสดงผล รองรับภาษา SQL ของ MySQL, PostgreSQL, SQL Server, Oracle, SQLite และ BigQuery โดยแต่ละภาษาจะมีคำสำคัญและคำสงวนที่แตกต่างกันเล็กน้อย
หลักการทำงานของฟังก์ชันการจัดรูปแบบ
-
1
วางโค้ด SQL ของคุณไว้
ข้อมูลในรูปแบบบล็อบเดี่ยว ผลลัพธ์ที่ถูกย่อจาก Hibernate หรือสิ่งอื่นใดก็ตาม คำสั่งหลายคำสั่งที่แยกด้วย `;` ทั้งหมดจะถูกจัดรูปแบบให้เป็นมาตรฐาน
-
2
เลือกไดอะเล็กต์และสไตล์
ไดอะเล็กต์ (dialect) ควบคุมรายการคำสำคัญ ส่วนสไตล์ควบคุมตำแหน่งเครื่องหมายจุลภาค (นำหน้าหรือตามหลัง) ความกว้างของการเยื้อง และการเขียนคำสำคัญเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก
-
3
โทเค็นจะถูกวิเคราะห์ ไม่ใช่ถูกแทนที่ด้วย regex
ตัวแยกคำ (tokenizer) สามารถจัดการกับสตริง คำอธิบาย วงเล็บ และคำสั่งย่อยได้อย่างถูกต้อง โดยข้อความแบบ literal จะถูกเก็บรักษาไว้ตามต้นฉบับอย่างครบถ้วน
-
4
คัดลอกผลลัพธ์ที่มีรูปแบบเรียบร้อยแล้ว
SQL ที่ผ่านการตรวจสอบความถูกต้อง, มีความหมายเหมือนกัน และมีรูปแบบการแสดงผลที่เรียบง่ายและเป็นระเบียบมากขึ้น
ก่อนและหลัง
ก่อนหน้านี้:
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;
หลังจากนั้น (ใช้จุดค่าก่อนคำสำคัญ เขียนคำสำคัญเป็นตัวพิมพ์ใหญ่ และแทรกช่องว่างสองตำแหน่งเพื่อเริ่มการ indent):
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;
การเลือกสไตล์ที่สำคัญ
- คำสำคัญที่เขียนตัวพิมพ์ใหญ่เทียบกับตัวพิมพ์เล็ก การใช้ตัวพิมพ์ใหญ่ถือเป็นแนวทางดั้งเดิมและเหมาะสมสำหรับการสแกนโค้ด ในขณะที่การใช้ตัวพิมพ์เล็กให้รูปลักษณ์เรียบร้อยกว่าในโปรแกรมแก้ไขโค้ดสมัยใหม่ที่มีฟังก์ชันเน้นไวยากรณ์
- เครื่องหมายจุลภาคแบบนำหน้า (Leading) เทียบกับแบบตามหลัง (Trailing): เครื่องหมายจุลภาคแบบนำหน้า (
, col) ช่วยให้การใส่คำอธิบายเพิ่มเติมในคอลัมน์เดียวทำได้ง่ายขึ้น ในขณะที่เครื่องหมายจุลภาคแบบตามหลัง (col,) มีรูปแบบการอ่านที่เป็นธรรมชาติมากกว่าในข้อความ - การวางเครื่องหมายจุลภาคใน
GROUP BY: โดยทั่วไปควรใช้หนึ่งเครื่องหมายต่อบรรทัดสำหรับประโยคที่ยาว และใช้เครื่องหมายจุลภาคแบบฝัง (inline) สำหรับประโยคที่สั้น - การจัดรูปแบบการแทรกข้อความ: การใช้
ONบนบรรทัดถัดไป (การแทรกแบบแขวน) เทียบกับการใช้บนบรรทัดเดียวกัน โดยเงื่อนไขที่มีความยาวจะได้รับประโยชน์จากการแทรกแบบแขวน - คำสั่งค้นหาย่อย: ให้แทรกข้อมูลของคำสั่งค้นหาย่อยทั้งหมดลงในรูปแบบการ indent ไม่ใช่เพียงแค่ส่วนที่อยู่ภายในวงเล็บเปิดเท่านั้น
ข้อควรระวังเฉพาะของแต่ละไดอะเล็กต์
- การใช้เครื่องหมายแบ็กทิก (backticks) ใน MySQL เทียบกับการใช้เครื่องหมายอัญประกาศคู่ (double-quotes) ใน PostgreSQL สำหรับตัวระบุ
WITHCTEs, MS SQL มีข้อกำหนด;ก่อนที่จะมีWITH; โปรแกรมจัดรูปแบบข้อมูลจะจัดการกับข้อกำหนดนี้- ฟังก์ชันของหน้าต่าง, ข้อกำหนดที่มีความยาวมากใน
OVER (...)จะได้รับประโยชน์จากการใช้รูปแบบการบรรจุข้อความแบบวนรอบ (line-wrapped) ในPARTITION BYและORDER BY - BigQuery มีชื่อไฟล์ในรูปแบบ
ARRAY_AGG,STRUCTและส่วนท้ายของตาราง (เช่น*_yyyymmdd) ซึ่งตัวแปลงคำศัพท์ (tokenizer) ห้ามทำให้แตก - Oracle ใช้ไวยากรณ์การเชื่อมข้อมูลแบบ external join รหัส
(+)โดยโปรแกรมจัดรูปแบบจะคงไวยากรณ์นี้ไว้ แต่จะระบุว่าเป็นรูปแบบเก่า
สิ่งที่ตัวจัดรูปแบบไม่ทำ
- แก้ไขข้อผิดพลาด, การเชื่อมข้อมูลแบบ JOIN ที่ไม่ถูกต้องจะยังคงไม่ถูกต้องต่อไป
- ขยายข้อมูลในคอลัมน์
SELECT *, รายการในคอลัมน์ไม่ได้ถูกอนุมานจากสเกมา - ปรับแต่งคำสั่งค้นหา, เพียงแค่เรื่องการจัดวางเท่านั้น ไม่รวมแผนการดำเนินการ
- การเขียนคำสั่งซับควอเรีย (subquery) ใหม่ให้อยู่ในรูปแบบของ CTE (Common Table Expression), เป็นประเด็นที่ต่างออกไป
คำถามที่พบบ่อย
ไม่, สิ่งเหล่านี้เป็นเพียงการปรับแต่งด้านรูปลักษณ์เท่านั้น ช่องว่าง บรรทัดใหม่ และตำแหน่งของเครื่องหมายจุลภาคอาจเปลี่ยนแปลงได้ แต่คำสำคัญ ตัวดำเนินการ ค่าตรง และตัวระบุต่างๆ จะถูกคงไว้อย่างแม่นยำ
รองรับ, CREATE TABLE, ALTER, CREATE PROCEDURE และทริกเกอร์ (triggers) โดยตัวจัดรูปแบบจะจัดการโครงสร้างบล็อก (BEGIN ... END) รวมถึงการต่อบรรทัดภายในโพรซีเยอร์
ไม่ควรเกิดขึ้น หากเกิดขึ้นจริง มีความเป็นไปได้สูงว่าเกิดจากไดอะเล็กต์ไม่ตรงกัน ลองสลับไดอะเล็กต์ดู กรุณาแจ้งกรณีที่เกิดข้อผิดพลาดซ้ำๆ เราถือว่าเป็นบั๊ก
Flink SQL และ Cassandra CQL มีรูปลักษณ์คล้ายคลึงกัน แต่มีคำสำคัญเฉพาะของไดอะเล็กต์ที่ตัวจัดรูปแบบกระแสหลักมักทำให้เสียหาย ควรใช้งานอย่างระมัดระวัง และตรวจสอบให้แน่ใจว่าผลลัพธ์ที่ได้ทำงานได้
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
ตัวตรวจสอบความถูกต้องของ JSON
ตรวจสอบไวยากรณ์ JSON และตรวจจับเครื่องหมายจุลภาคต่อท้าย เครื่องหมายอัญประกาศที่ผิด คีย์ซ้ำ และโครงสร้างที่ผิดรูปแบบ พร้อมระบุตำแหน่งข้อผิดพลาดอย่างแม่นยำ
ตัวตรวจสอบอีเมล
ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องมือนี้มีให้บริการในภาษาอื่น
- SQL-formaterare [SV]
- SQL 포매터 [KO]
- Formateur SQL [FR]
- SQL-formatter [NL]
- Định dạng SQL [VI]
- Formater SQL [PL]
- Format SQL [ID]
- تنسيق SQL [AR]
- SQL-Formatter [DE]
- Formateador SQL [ES]
- SQLフォーマッター [JA]
- Formatador SQL [PT]
- SQL Biçimlendirici [TR]
- SQL 格式化器 [ZH]
- SQL Formatter [EN]
- Formatter SQL [IT]
- Форматтер SQL [RU]