Implicit Conversion และ Explicit Conversion

Implicit Conversion และ Explicit Conversion
ผู้เขียนได้พบเห็นบทความเดิมของทาง 9Expert สองตอนด้วยกัน คือ
จึงอยากขยายความเข้าใจจากบทความนี้ครับ
Microsoft SQL Server สามารถแปลงชนิดของข้อมูลจากแบบหนึ่งไป เป็นอีกแบบหนึ่งได้ตามตารางนี้
ผู้เขียนได้พบเห็นบทความเดิมของทาง 9Expert สองตอนด้วยกัน คือ
- SQL Server Tip: การ Convert วันที่ ใน SQL Server ตอนแรก
https://www.9experttraining.com/articles/sql-server-tip - SQL Server Tip: การ Convert วันที่ ใน SQL Server ตอนจบ
https://www.experttraining.com/articles/sql-server-tip-convert-
จึงอยากขยายความเข้าใจจากบทความนี้ครับ
Microsoft SQL Server สามารถแปลงชนิดของข้อมูลจากแบบหนึ่งไป เป็นอีกแบบหนึ่งได้ตามตารางนี้

โดยที่
Explicit Conversion หมายถึง การแปลงชนิดของข้อมูลโดยต้องประกาศ และ
Implicit Conversion หมายถึง การแปลงชนิดของข้อมูลโดย ไม่ ต้องประกาศ และไม่ใช่ทุกชนิดข้อมูลจะ
แปลงไปอีกชนิดข้อมูลได้ แต่ข้อมูลนั้นต้องสมเหตุผลในการแปลงด้วย


แปลงไปอีกชนิดข้อมูลได้ แต่ข้อมูลนั้นต้องสมเหตุผลในการแปลงด้วย
จากตัวอย่าง '999' เป็นข้อมูลชนิดตัวอักษร กระทำกับข้อมูลชนิดตัวเลข และได้ผลลัพธ์ออกมาเป็น 1000
นั่นแสดงว่าเกิด Implicit Conversion
โดยการแปลงข้อมูลชนิดตัวอักษรไปเป็นข้อมูลชนิดตัวเลขโดยอัตโนมัติ แล้วจึงนำไปบวกกับ 1 นั่นเอง
(ข้อแม้ของตัวอย่างนี้คือ ข้อมูลชนิด ตัวอักษร ที่เข้ากระทำ ต้องเป็นตัวเลข)
นั่นแสดงว่าเกิด Implicit Conversion
โดยการแปลงข้อมูลชนิดตัวอักษรไปเป็นข้อมูลชนิดตัวเลขโดยอัตโนมัติ แล้วจึงนำไปบวกกับ 1 นั่นเอง
(ข้อแม้ของตัวอย่างนี้คือ ข้อมูลชนิด ตัวอักษร ที่เข้ากระทำ ต้องเป็นตัวเลข)
จากตัวอย่าง 'ABC' เป็นข้อมูลชนิดตัวอักษร กระทำกับข้อมูลชนิดตัวเลข เหมือนกับตัวอย่างแรก นั่นเอง
(เพียงแต่ข้อมูลชนิด ตัวอักษร ที่เข้ากระทำ ไม่ใช่ตัวเลข)
ผลลัพธ์ที่ได้คือ การแจ้งเตือน Error ว่าไม่สามารถแปลงชนิดข้อมูลตัวอักษร 'ABC' ไปเป็นตัวเลขได้ (ซึ่งก็ไม่สมควรจะทำได้อยู่แล้ว)
จากสองตัวอย่างข้างต้นแสดงให้เห็นว่า Implicit Conversion จะเกิดขึ้นโดยอัตโนมัติ
ด้วยการนำเอาข้อมูลต่างชนิดข้อมูลมากระทำกันหรือเปรียบเทียบกัน แต่การแปลงชนิดข้อมูลจะไม่เกิดขึ้นเสมอไป
ทั้งนี้ขึ้นอยู่ความเหมาะสมและลำดับการแปลงข้อมูลด้วย
(ในเรื่องลำดับของการแปลงเป็นเรื่องสำคัญมาก หากการแปลงไม่อิงลำดับจากตัวอย่างที่สอง ผลลัพธ์ที่ได้
ก็อาจจะเป็น 'ABC30'แต่ Implicit Conversion จะแปลงจากข้อมูลชนิดตัวอักษรไปเป็นข้อมูลชนิดตัวเลขได้
แต่จะไม่แปลงจากข้อมูลชนิดตัวเลขไปเป็นข้อมูลชนิดตัวอักษร)
ลำดับการแปลงของ Implicit Conversion มีดังนี้
(เพียงแต่ข้อมูลชนิด ตัวอักษร ที่เข้ากระทำ ไม่ใช่ตัวเลข)
ผลลัพธ์ที่ได้คือ การแจ้งเตือน Error ว่าไม่สามารถแปลงชนิดข้อมูลตัวอักษร 'ABC' ไปเป็นตัวเลขได้ (ซึ่งก็ไม่สมควรจะทำได้อยู่แล้ว)
จากสองตัวอย่างข้างต้นแสดงให้เห็นว่า Implicit Conversion จะเกิดขึ้นโดยอัตโนมัติ
ด้วยการนำเอาข้อมูลต่างชนิดข้อมูลมากระทำกันหรือเปรียบเทียบกัน แต่การแปลงชนิดข้อมูลจะไม่เกิดขึ้นเสมอไป
ทั้งนี้ขึ้นอยู่ความเหมาะสมและลำดับการแปลงข้อมูลด้วย
(ในเรื่องลำดับของการแปลงเป็นเรื่องสำคัญมาก หากการแปลงไม่อิงลำดับจากตัวอย่างที่สอง ผลลัพธ์ที่ได้
ก็อาจจะเป็น 'ABC30'แต่ Implicit Conversion จะแปลงจากข้อมูลชนิดตัวอักษรไปเป็นข้อมูลชนิดตัวเลขได้
แต่จะไม่แปลงจากข้อมูลชนิดตัวเลขไปเป็นข้อมูลชนิดตัวอักษร)
ลำดับการแปลงของ Implicit Conversion มีดังนี้

จากตัวอย่างที่สองหากต้องการให้ได้ผลลัพธ์เป็น 'ABC30' จะต้องแปลงข้อมูลชนิดตัวเลขไปเป็นตัวอักษรด้วย Explicit Conversion ดังแสดง
หรือ
จากผลลัพธ์ทั้งสอง จะเป็นตัวอย่างของ Explicit Conversion ต่างกันตรงฟังก์ชันที่ใช้
ตัวอย่างแรกเป็นการใช้ฟังก์ชัน CAST และ
ตัวอย่างที่สองเป็นการใช้ฟังก์ชัน Convert
ซึ่งทั้งสองฟังก์ชันใช้สำหรับแปลงชนิดข้อมูลเหมือนกันต่างกันที่ CAST เป็นฟังก์ชันตามมาตรฐาน ANSI
นั่นแสดงว่าฟังก์ชัน CAST สามารถใช้ได้บนระบบจัดการฐานข้อมูลใดก็ได้ที่เป็นไปตามมาตรฐาน ANSI อาทิ Oracle
แต่สำหรับฟังก์ชัน Convert มีใช้ใน Microsoft SQL Server เท่านั้น โดย Syntax ของฟังก์ชันทั้งสองเป็นดังนี้
ตัวอย่างแรกเป็นการใช้ฟังก์ชัน CAST และ
ตัวอย่างที่สองเป็นการใช้ฟังก์ชัน Convert
ซึ่งทั้งสองฟังก์ชันใช้สำหรับแปลงชนิดข้อมูลเหมือนกันต่างกันที่ CAST เป็นฟังก์ชันตามมาตรฐาน ANSI
นั่นแสดงว่าฟังก์ชัน CAST สามารถใช้ได้บนระบบจัดการฐานข้อมูลใดก็ได้ที่เป็นไปตามมาตรฐาน ANSI อาทิ Oracle
แต่สำหรับฟังก์ชัน Convert มีใช้ใน Microsoft SQL Server เท่านั้น โดย Syntax ของฟังก์ชันทั้งสองเป็นดังนี้

จะเห็นว่าทั้งสองฟังก์ชั่นเหมือนกันและใช้แทนกันได้ แต่ ฟังก์ชั่น Convert จะมีส่วนของพารามิเตอร์ Style เป็นส่วนเสริมใช้
สำหรับกำกับการแปลงข้อมูลชนิดวันเวลาไปเป็นชนิดตัวอักษร เท่านั้น ตามตารางดังต่อไปนี้
ตัวอย่างการใช้งาน
สำหรับกำกับการแปลงข้อมูลชนิดวันเวลาไปเป็นชนิดตัวอักษร เท่านั้น ตามตารางดังต่อไปนี้
ค่า (ไม่แสดงตวรรษ) |
ค่า (แสดงศตวรรษ) |
คำอธิบาย |
0 | 100 | mon dd yyyy hh:mi AM/PM (ค่าตั้งต้น) |
1 | 101 | mm/dd/yyyy (แบบอเมริกัน) |
2 | 102 | yy.mm.dd (มาตรฐาน ANSI) |
3 | 103 | dd/mm/yy (แบบอังกฤษ) |
4 | 104 | dd.mm.yy (แบบเยอรมัน) |
5 | 105 | dd-mm-yy (แบบอิตาลี่) |
6 | 106 | dd mon yy |
7 | 107 | Mon dd, yy |
8 | 108 | hh:mi:ss |
9 | 109 | mon dd yyyy hh:mi:ss:mmm AM/PM |
10 | 110 | mm-dd-yy (แบบอเมริกัน) |
11 | 111 | yy/mm/dd (แบบญี่ปุ่น) |
12 | 112 | yymmdd (มาตรฐาน ISO) |
13 | 113 | dd mon yyyy hh:mi:ss:mmm (แบบยุโรป – แสดงเวลาแบบ 24 ชั่วโมง) |
14 | 114 | hh:mi:ss:mmm (แสดงเวลาแบบ 24 ชั่วโมง) |
20 | 120 | yyyy-mm-dd hh:mi:ss (ตามข้อกำหนด ODBC – แสดงเวลาแบบ 24 ชั่วโมง) |
21 | 121 | yyyy-mm-dd hh:mi:ss:mmm (ตามข้อกำหนด ODBC – แสดงเวลาแบบ 24 ชั่วโมง) |
126 | yyyy-mm-ddThh:mi:ss:mmm (มาตรฐาน ISO 8601) | |
127 | yyyy-mm-ddThh:mi:ss:mmmZ (มาตรฐาน ISO 8601 กับเขตเวลา Z) | |
130 | dd mon yyyy hh:mi:ss:mmm AM/PM (แบบฮิจเราะห์) | |
131 | dd/mm/yy hh:mi:ss:mmm AM/PM (แบบฮิจเราะห์) |
ตัวอย่างการใช้งาน
AmericanStyle
------------------------------
06/30/15
AmericanStyleWithCentury
------------------------------
06/30/2015
BritishStyle
------------------------------
30/06/15
BritishStyleWithCentury
------------------------------
30/06/2015
GermanStyle
------------------------------
30.06.15
GermanStyleWithCentury
------------------------------
30.06.2015
ItalianStyle
------------------------------
30-06-15
ItalianStyleWithCentury
------------------------------
30-06-2015
HijriStyle
------------------------------
14 رمضان 1436 12:58:58:080PM
จากการอธิบาย และ ตัวอย่างต่าง ๆ คงทำให้ผู้อ่านเข้าใจ Implicit Conversion และ Explicit Conversion
ได้มากขึ้นนะครับ ซึ่งเนื้อหาดังกล่าว เป็นส่วนหนึ่งของการเรียนการสอนในหลักสูตร Microsoft SQL Server 2014 Database Queries
https://www.9experttraining.com/microsoft-sql-server-database-queries-course
9Expert สอนสไตล์ใช้งานจริง
------------------------------
06/30/15
AmericanStyleWithCentury
------------------------------
06/30/2015
BritishStyle
------------------------------
30/06/15
BritishStyleWithCentury
------------------------------
30/06/2015
GermanStyle
------------------------------
30.06.15
GermanStyleWithCentury
------------------------------
30.06.2015
ItalianStyle
------------------------------
30-06-15
ItalianStyleWithCentury
------------------------------
30-06-2015
HijriStyle
------------------------------
14 رمضان 1436 12:58:58:080PM
จากการอธิบาย และ ตัวอย่างต่าง ๆ คงทำให้ผู้อ่านเข้าใจ Implicit Conversion และ Explicit Conversion
ได้มากขึ้นนะครับ ซึ่งเนื้อหาดังกล่าว เป็นส่วนหนึ่งของการเรียนการสอนในหลักสูตร Microsoft SQL Server 2014 Database Queries
https://www.9experttraining.com/microsoft-sql-server-database-queries-course
9Expert สอนสไตล์ใช้งานจริง
บทความโดย
อาจารย์ภัคพงศ์ กฤตวัฒน์
วิทยากรดูแลและออกแบบหลักสูตร
กลุ่มวิชา SQL Server/Window Server