สำหรับ Blog นี้ผมก็ได้มาแก้ไข Module Perf ที่สรุปแล้วต้องให้ Field ประเภทที่ต้องเก็บทศนิยมละเอียดนิดนึง เลยได้ใช้ Data Type DECFLOAT ครับ แล้วที่นี้มีอีก Site ต้องใช้งานด้วย แต่ Site นั้นใช้ MS SQL / Azure SQL คราวนี้ต้องมาแปลง SQL ครับ
ก่อนอื่น DECFLOAT คือ อะไร ?
- DECFLOAT = Data Type นึงที่เอาไว้เป็นพวกตัวเลขทั้งหมด(Precision) และทศนิยม(Scale) ครับ
- ถ้าเราต้องการเก็บค่า 3.14159
- Precision = 6 (3.14159 >> นับหมดเลย)
- Scale = 5 (นับเฉพาะ .14159) - DECFLOAT >> ถ้า MAP ANSI SQL = เป็นตัว numeric ครับ //DB2 เค้ามี Style กำหนดชื่อเอง 555
แล้วมันต่างกับ Decimal ยังไง ANSI SQL Syntax คล้ายๆกัน
Syntax: DECIMAL(P, S) Example: DECIMAL(10, 5) Syntax: NUMERIC(P, S) Example: NUMERIC(10,5)
- Decimal กับ Numeric ต่างกันตรงนี้
- Numeric มัน strict กว่าครับ precision และ scale ต้องเป๊ะๆ
- Decimal ยอมให้ใส่เกินได้ เช่น DECIMAL(10, 5) เราสามารถใส่ตัวเลขที่ precision มากกว่ากำหนดไว้ได้ เช่น 12345678910.12 (P = 11)
SQL Server / Azure SQL ต้องใช้ Data Type ไหน ?
ตอนแรกคิดว่า Decimal แหละ แต่เพื่อความั่นใจลองหา Official Doc ยืนยันดีกว่า เพราะ ถ้าขึ้น Production ไปแล้ว มันตามแก้ยาก จากการลอง Research ดูทาง Microsoft มีคู่มือทำไว้ครับ "Guide to Migrating from DB2 to SQL Server and Azure SQL DB, SQL Server Technical Article" มีตารางไว้เลยครับ ซึ่งมันดีมากๆครับ
สรุป DB2 Data Type DECFLOAT เท่ากับ SQL SERVER Data Type numeric ครับ
Reference
- Db2 to Azure SQL Database: Migration guide - Azure SQL Database | Microsoft Learn
- "Guide to Migrating from DB2 to SQL Server and Azure SQL DB, SQL Server Technical Article"
- decimal and numeric (Transact-SQL) - SQL Server | Microsoft Learn
- DECFLOAT - IBM Documentation
- Numeric vs. Decimal Data Types in SQL | LearnSQL.com
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.