ค้นหาชื่อคอลั่มในตาราง ฐานข้อมูล SQL Server, PostgreSQL, MySQL, MariaDB

เป็นเรื่องที่ยุ่งยากลำบากใจสำหรับผู้ดูแลระบบฐานข้อมูล ที่มี table จำนวนมาก ทำให้การจดจำโครงสร้างตารางนั้นแทบเป็นไปไม่ได้ วิธีที่จะทำให้ค้นหาที่มาที่ไป หรือ ชื่อของคอลั่มที่เราต้องการ อาจจะทำเป็น data dictionary เอาไว้ เพื่อค้นหา แต่มันก็ไม่ได้ง่ายนะ และหากมีการเปลี่ยนแปลงใน database แล้ว แต่ไม่กลับมาแก้ไขใน data dic มันก็จะไม่มีความหมาย อีกวิธีหนึ่งที่นิยมใช้กันก็คือ query ใน information_schema ที่มีทั้งใน SQL Server, PostgreSQL และ MySQL โดยใช้คำสั่ง SQL ดังนี้

SQL Server

SELECT DISTINCT
	T.TABLE_TYPE AS table_type,
	C.TABLE_NAME AS table_name,
	C.COLUMN_NAME AS column_name,
	C.DATA_TYPE AS column_type,
	C.CHARACTER_MAXIMUM_LENGTH AS column_length
FROM
	INFORMATION_SCHEMA.COLUMNS AS C
	LEFT JOIN INFORMATION_SCHEMA.TABLES AS T ON T.TABLE_CATALOG = C.TABLE_CATALOG 
	AND T.TABLE_SCHEMA = C.TABLE_SCHEMA 
	AND T.TABLE_NAME = C.TABLE_NAME 
WHERE
	LOWER ( C.COLUMN_NAME ) LIKE '%YOUR_KEYWORD_HERE%' 
ORDER BY
	T.TABLE_TYPE,
	C.TABLE_NAME,
	C.COLUMN_NAME;

PostgreSQL

SELECT DISTINCT
	T.table_type AS table_type,
	T.table_name AS table_name,
	C.column_name AS column_name,
	C.data_type AS column_type,
	C.character_maximum_length AS column_length 
FROM
	information_schema.tables T
	INNER JOIN information_schema.columns C ON C.table_name = T.table_name 
	AND C.table_schema = T.table_schema 
WHERE
	T.table_schema NOT IN ( 'information_schema', 'pg_catalog' ) 
	AND LOWER ( C.column_name ) LIKE '%YOUR_KEYWORD_HERE%' 
ORDER BY
	T.table_type,
	T.table_name,
	C.column_name;

MySQL or MariaDB

SELECT DISTINCT
	T.TABLE_TYPE AS table_type,
	C.TABLE_NAME AS table_name,
	C.COLUMN_NAME AS column_name,
	C.COLUMN_TYPE AS column_type,
	C.CHARACTER_MAXIMUM_LENGTH AS column_length 
FROM
	INFORMATION_SCHEMA.COLUMNS AS C
	LEFT JOIN INFORMATION_SCHEMA.TABLES AS T ON T.TABLE_CATALOG = C.TABLE_CATALOG 
	AND T.TABLE_SCHEMA = C.TABLE_SCHEMA 
	AND T.TABLE_NAME = C.TABLE_NAME 
WHERE
	LOWER( C.COLUMN_NAME ) LIKE '%YOUR_KEYWORD_HERE%' 
ORDER BY
	T.TABLE_TYPE,
	C.TABLE_NAME,
	C.COLUMN_NAME

เปลี่ยน YOUR_KEYWORD_HERE เป็นคำที่ต้องการค้นหา เท่านี้เราก็จะได้ พิมพ์เป็นตัวเล็กทั้งหมดได้ เนื่องจากเราค้นหาโดยเทียบ function lower() แล้ว เพื่อกันชื่อคอลั่มที่เป็นตัวอักษรใหญ่บ้าง เล็กบ้าง

  • table_type : จะมี BASE TABLE และ VIEW
  • table_name : คือตารางที่พบชื่อคอลั่ม ตามที่เราค้นหา
  • column_name : คือชื่อคอลั่มที่ตรงกับที่ค้นหา
  • column_type : คือประเภทของข้อมูล
  • column_length : ขนาดของข้อมูลสูงสุด

Note:

หลัก ๆ ให้ดูตาราง INFORMATION_SCHEMA.COLUMNS กับ INFORMATION_SCHEMA.TABLES คู่กัน มันจะบอกข้อมูลของตารางและคอลั่ม อย่างละเอียดไว้อยู่แล้ว