- 1 1. හැඳින්වීම
- 2 2. MySQL හි වර්ග පරිවර්තන වර්ග
- 3 3. ප්රායෝගික උදාහරණ: ස්ට්රින්වලින් සංඛ්යා වෙත පරිවර්තනය
- 4 4. ප්රායෝගික උදාහරණ: සංඛ්යාත්මක දත්ත 문자열 බවට පරිවර්තනය
- 5 5. වර්ග පරිවර්තන සමඟ උසස් භාවිතා අවස්ථා
- 6 6. CAST සහ CONVERT අතර වෙනස්කම්
- 7 7. Important Notes and Best Practices
- 8 8. Summary
- 9 9. FAQ (පොදු ප්රශ්න)
- 9.1 Q1. ‘abc’ වැනි විලේෂණයක් CAST කළහොත් කුමක් සිදුවේද?
- 9.2 Q2. මට CAST හෝ CONVERT භාවිතා කළ යුතුද?
- 9.3 Q3. අනුකූල වර්ග පරිවර්තනය ප්රමාණවත්ද?
- 9.4 Q4. WHERE හෝ ORDER BY හි වර්ග පරිවර්තනය භාවිතා කිරීම දර්ශක අක්රිය කරනවාද?
- 9.5 Q5. දශමස්ථ ගණිතයන් හෝ විශාල සංඛ්යා සඳහා වර්ග පරිවර්තනය ආරක්ෂිතද?
- 9.6 Q6. විලේෂණයක් ලෙස වර්ගීකරණය සහ සංඛ්යාවක් ලෙස වර්ගීකරණය අතර වෙනස කුමක්ද?
1. හැඳින්වීම
MySQL සමඟ දත්ත ගබඩාවක් ක්රියාත්මක කරන විට, “අංක ලෙස සැලකිය යුතු දත්ත ස්ට්රින් වර්ගයක් ලෙස සුරැකි ඇත” හෝ “දත්ත ස්ට්රින් වශයෙන් පවතින තෙක් ගණනය සහ එකතු කිරීම් සිදු කළ නොහැක” යන තත්ත්වයන් බොහෝ විට ඔබට මුහුණ දීමට සිදුවේ. උදාහරණයක් ලෙස, Excel හෝ CSV ගොනු වලින් ආයාත කරන ලද දත්ත, සංඛ්යාත්මක අගයන් නිරූපණය කරන අතරත්, VARCHAR හෝ CHAR ලෙස සුරැකි වීම සාමාන්යයයි. එවැනි අවස්ථාවල, එකතුව, සාමාන්යය, සංඛ්යාත්මක සැසඳීම වැනි ක්රියාකාරකම් අපේක්ෂිත ලෙස ක්රියා නොකරනු ඇත, එමනිසා නිවැරදි SQL විමසුම් ලිවීම අභියෝගාත්මක වේ.
අනෙක් පැත්තට, සංඛ්යාත්මක දත්ත ස්ට්රින් ලෙස සැකසිය යුතු අවස්ථා ඇත. උදාහරණයක් ලෙස, හැඳුනුම් අංකයක් හෝ කේතයක් ශුන්ය‑පැඩින් කිරීම, හෝ සංඛ්යාත්මක දත්තය වෙනත් තීරුවල සමඟ එකතු කර ප්රදර්ශනය කිරීම. එවැනි අවස්ථාවල, සංඛ්යාත්මක වර්ගයන් ස්ට්රින් වර්ගයන්ට පරිවර්තනය කිරීම අවශ්ය වේ.
මෙම ආකාරයෙන්, “ස්ට්රින් සහ සංඛ්යා අතර වර්ග පරිවර්තනය” MySQL හි දත්ත සවිස්තරාත්මකව සැකසීමට අවශ්ය මූලික කුසලතා අතරේ එකකි. වර්ග පරිවර්තනය නිසි ලෙස භාවිතා කිරීමෙන්, ඔබට දත්ත අඛණ්ඩතාවය රැකගෙන, සවිස්තරාත්මක එකතු කිරීම සහ සැකසීම සවිස්තරාත්මකව සිදු කළ හැක.
මෙම ලිපියේ, MySQL හි ස්ට්රින් සහ සංඛ්යා අතර පරිවර්තනය කෙසේ සිදු කරන්නේ, මෙම තාක්ෂණයන් කෙලින්ම කෙසේ භාවිතා කළ යුතුද, සහ වාස්තුක අත්දැකීම් මත පදනම් වූ පොදු වැරදි සහ හොඳම ක්රියාමාර්ග පිළිබඳ පැහැදිලි කරනු ඇත. ඔබ නවකයෙක් හෝ පළපුරුදු SQL සංවර්ධකයෙක් වුවත්, මෙම මාර්ගෝපදේශය ප්රායෝගික වටිනාකමක් ලබා දේ.
2. MySQL හි වර්ග පරිවර්තන වර්ග
MySQL දත්ත වර්ග පරිවර්තනය සඳහා කිහිපයක් පහසු විශේෂාංග ලබා දේ. මෙම කොටසේ, අපි “පැහැදිලි වර්ග පරිවර්තනය” සහ “අපේක්ෂිත වර්ග පරිවර්තනය” යන ප්රධාන රටා දෙක, ඒවායේ නියෝජිත ක්රම සමඟ පැහැදිලි කරමු.
2.1 පැහැදිලි වර්ග පරිවර්තනය
පැහැදිලි වර්ග පරිවර්තනය යනු SQL තුළ “මෙම අගය නියමිත වර්ගයකට පරිවර්තනය කළ යුතුය” යනුවෙන් පැහැදිලිව සඳහන් කිරීමයි. පහත සඳහන් දෙකේ ක්රියාකාරකම් සාමාන්යයෙන් භාවිතා වේ.
CAST ක්රියාකාරකම
CAST() යනු නියමිත වර්ගයකට අගයක් පරිවර්තනය කරන ප්රමිත SQL ක්රියාකාරකමකි. එය MySQL හි පුළුල් ලෙස භාවිතා වේ.
SELECT CAST('123' AS SIGNED);
මෙම උදාහරණයේ, ස්ට්රින් '123' එක අත්සන් කළ පූර්ණ සංඛ්යාවකට (SIGNED) පරිවර්තනය වේ. වෙනත් පරිවර්තනය කළ හැකි වර්ගයන් අතර UNSIGNED (අත්සන් නොකළ පූර්ණ සංඛ්යාව), DECIMAL (ස්ථිර‑දශම සංඛ්යාව), CHAR (ස්ට්රින්), සහ DATE (දිනය) ඇතුළත් වේ.
CONVERT ක්රියාකාරකම
CONVERT() යනු අගයන් වෙනත් දත්ත වර්ගයන්ට පරිවර්තනය කිරීම සඳහා භාවිතා කරන තවත් ක්රියාකාරකමකි. ව්යවස්ථාව පහත පරිදි වේ.
SELECT CONVERT('456', UNSIGNED);
මෙම උදාහරණයේ, ස්ට්රින් '456' එක අත්සන් නොකළ පූර්ණ සංඛ්යාවකට (UNSIGNED) පරිවර්තනය වේ. CAST() සමඟ ප්රධාන වෙනස වන්නේ CONVERT() අක්ෂර සමුහ පරිවර්තනය සඳහාද භාවිතා කළ හැකි බවයි.
2.2 අපේක්ෂිත වර්ග පරිවර්තනය
අපේක්ෂිත වර්ග පරිවර්තනය යනු MySQL ක්රියාකාරකම් හෝ සැසඳීම් සිදු කරන විට ස්වයංක්රීයව දත්ත වර්ග පරිවර්තනය කරන යන්ත්රණයකි.
උදාහරණයක් ලෙස, සංඛ්යාවක් සහ ස්ට්රින් එකක් එකතු කරන විට, MySQL ස්ට්රින් එක ස්වයංක්රීයව සංඛ්යාත්මක අගයක් බවට පරිවර්තනය කරයි.
SELECT 1 + '2';
-- Result: 3
එසේම, සංඛ්යාත්මක අගයන් ස්ට්රින් ලෙස එකතු කරන විට:
SELECT CONCAT(10, ' apples');
-- Result: '10 apples'
අපේක්ෂිත වර්ග පරිවර්තනය පහසුය, නමුත් එය අනිසි ප්රතිඵල ලබා දිය හැක. එබැවින්, සංකීර්ණ තර්ක හෝ වැදගත් ක්රියාවලීන් සඳහා පැහැදිලි වර්ග පරිවර්තනය භාවිතා කිරීම දැඩි ලෙස නිර්දේශ කරයි.
3. ප්රායෝගික උදාහරණ: ස්ට්රින්වලින් සංඛ්යා වෙත පරිවර්තනය
MySQL හි, සංඛ්යාත්මක අගයන් ස්ට්රින් (උදාහරණයක් ලෙස CHAR හෝ VARCHAR) ලෙස සුරැකි විට, ඔබට ගණනය හෝ සංඛ්යාත්මක සැසඳීම් විශ්වාසදායකව සිදු කළ නොහැක. එවැනි දත්ත නිවැරදිව එකතු කර විශ්ලේෂණය කිරීම සඳහා, ස්ට්රින්වලට සංඛ්යාත්මක වර්ග පරිවර්තනය කළ යුතුය. මෙම කොටස සාමාන්යයෙන් භාවිතා වන පරිවර්තන ක්රම සහ ප්රධාන අවධානම් පිළිබඳ හැඳින්වීම කරයි.
3.1 CAST ක්රියාකාරකම භාවිතා කර පරිවර්තනය
මූලිකම ක්රමය CAST() ක්රියාකාරකම භාවිතා කිරීමයි. උදාහරණයක් ලෙස, ස්ට්රින් '100' එක පූර්ණ සංඛ්යාවකට පරිවර්තනය කිරීමට, පහත පරිදි ලියන්න:
SELECT CAST('100' AS SIGNED) AS numeric_result;
-- Result: 100 (integer)
Use SIGNED for signed integers and UNSIGNED for unsigned integers. For decimal data, you can use DECIMAL or FLOAT as well.
SELECT CAST('123.45' AS DECIMAL(10,2)) AS decimal_result;
-- Result: 123.45
3.2 CONVERT ක්රියාවලිය සමඟ පරිවර්තනය
CONVERT() ක්රියාවලිය සමාන ආකාරයෙන් භාවිතා කළ හැක:
SELECT CONVERT('200', SIGNED) AS converted_result;
-- Result: 200
දෙකම එකම ප්රතිඵලය ලබා දෙයි, නමුත් CAST() ප්රමිතිය SQL එකකි සහ වඩාත් පෝර්ට්බිලිටි ලබා දෙන බැවින්, සැකයක් ඇති විට සාමාන්යයෙන් එය භාවිතා කිරීම නිර්දේශ කරයි.
3.3 ගණිත ක්රියාකාරකම් මගින් අස්පෂ්ට පරිවර්තනය
SQL ප්රකාශනවල සංඛ්යාත්මක සහ 문자열 වර්ග සමඟ ගණිත ක්රියාකාරකම් කරන විට, MySQL ස්වයංක්රීයව 문자열ය සංඛ්යාවකට පරිවර්තනය කරයි. උදාහරණයක්:
SELECT '50' + 25 AS total;
-- Result: 75
ඔබට මෙම හැසිරීම එකතු කිරීමේ ක්රියාකාරකම් වලටද යොදා ගත හැක. උදාහරණයක් ලෙස, ඔබ SUM() වෙත 문자열 වර්ග තීරුවක් ලබා දුන්නේ නම්, MySQL ස්වයංක්රීයව සංඛ්යාත්මක පරිවර්තනය උත්සාහ කර එම අගයන් එකතු කරයි:
SELECT SUM(amount) FROM sales_data;
-- Even if the amount column is VARCHAR, MySQL will attempt numeric summation
3.4 ශුන්ය-පැඩි 문자열 සහ සංඛ්යාත්මක නොවන අගයන් පිළිබඳ අවධානය
ශුන්ය-පැඩි 문자열 (උදා: '000100') ගණනකට පරිවර්තනය කළ හැක:
SELECT CAST('000100' AS SIGNED) AS converted_result;
-- Result: 100
කෙසේ වෙතත්, 문자열ය සංඛ්යාත්මක නොවන අක්ෂර අඩංගු නම් සැලකිල්ලෙන් සිටින්න. ඔබ CAST('abc123' AS SIGNED) වැනි දෙයක් පරිවර්තනය කළහොත්, ආරම්භයේ සංඛ්යාත්මක අක්ෂර නොමැති නම් MySQL 0 ලබා දෙයි. දත්ත ගුණාත්මකභාවය අනුව, පරිවර්තනයට පෙර ආදාන වලංගුකරණය කිරීම වැදගත් වේ.
3.5 සාමාන්ය වාස්තුකාලීන භාවිතා උදාහරණ
- Excel/CSV ආයාතයන් හේතුවෙන් 문자열 බවට පත්වූ විකුණුම් හෝ මුදල් දත්ත එකතු කිරීම
- 문자열 ලෙස සුරැකි ID ගණනාව (ඇත්තේ සංඛ්යාත්මක වුවත්) සංඛ්යාත්මක ක්රමයෙන් සකස් කිරීම
YYYYMMDDආකාරයේ දිනය 문자열 ලෙස සුරැකි දිනයන් දිනය අනුව (පසුබැසීමේ විස්තර) සකස් කිරීම
4. ප්රායෝගික උදාහරණ: සංඛ්යාත්මක දත්ත 문자열 බවට පරිවර්තනය
MySQL හි, සංඛ්යාත්මක දත්ත 문자열 ලෙස සැලකීමට අවශ්ය වන බොහෝ අවස්ථා ඇත. සාමාන්ය උදාහරණ ලෙස ශුන්ය-පැඩි ID හෝ කේත පෙන්වීම, හෝ සංඛ්යාත්මක අගයන් වෙනත් පෙළ සමඟ එකතු කර පණිවුඩ නිර්මාණය කිරීම ඇතුළත් වේ. මෙම කොටස නියෝජිත ක්රම සහ ප්රායෝගික භාවිතා උදාහරණ ඉදිරිපත් කරයි.
4.1 CAST ක්රියාවලිය සමඟ පරිවර්තනය
INT හෝ DECIMAL වැනි සංඛ්යාත්මක වර්ගයක් 문자열 වර්ගයක් බවට පැහැදිලිව පරිවර්තනය කිරීමට CAST() භාවිතා කරන්න:
SELECT CAST(123 AS CHAR) AS string_result;
-- Result: '123'
මෙම ක්රමය භාවිතා කර ඔබට සංඛ්යාත්මක තීරුවන් වෙනත් 문자열 සමඟ පහසුවෙන් එකතු කළ හැක.
4.2 CONVERT ක්රියාවලිය සමඟ පරිවර්තනය
CONVERT() සමඟද ඒම කරගත හැක:
SELECT CONVERT(456, CHAR) AS converted_result;
-- Result: '456'
CAST() සමඟ වඩාත් වෙනසක් නැත, නමුත් ප්රමිතිය SQL දෘශ්යකෝණයෙන් CAST() ට සුළු වශයෙන් වඩාත් කැමැත්තක් ඇත.
4.3 එකතු කිරීම මගින් අස්පෂ්ට පරිවර්තනය
CONCAT() වැනි ක්රියාකාරකම් භාවිතා කර සංඛ්යාත්මක සහ 문자열 එකතු කරන විට, MySQL ස්වයංක්රීයව සංඛ්යාත්මක අගයන් 문자열 බවට පරිවර්තනය කරයි.
SELECT CONCAT(2024, ' year') AS fiscal_year_display;
-- Result: '2024 year'
මෙවැනි අස්පෂ්ට පරිවර්තනය සාමාන්ය වාර්තා ප්රතිදානය සහ දත්ත ආකෘතිකරණය සඳහා බොහෝවිට භාවිතා වේ.
4.4 සාමාන්ය වාස්තුකාලීන භාවිතා උදාහරණ
- ශුන්ය-පැඩි ID ජනනය සංඛ්යාත්මක ID එක 5 අංක ලෙස පෙන්වීමට,
LPAD()සමඟ මෙසේ එකතු කරන්න:SELECT LPAD(CAST(id AS CHAR), 5, '0') AS zero_padded_id FROM users; -- id=7 නම් ප්රතිඵලය '00007' - දිනයන් හෝ මුදල් 문자열 ලෙස එකතු කිරීම
SELECT CONCAT('The total amount is ', CAST(total AS CHAR), ' yen.') AS message FROM orders; -- total=1500 නම් ප්රතිඵලය 'The total amount is 1500 yen.'
4.5 සටහන්
පරිවර්තනය කළ 문자열ය දෘශ්යමය ලෙස එකම පෙනුමක් ලබා දුන්නත්, “සකස් කිරීම” සහ “සසඳන ක්රියාකාරකම්” හැසිරීම වෙනස් වේ.
උදාහරණයක් ලෙස, 문자열 ලෙස සකස් කරන විට '20' යනු '100' ට පෙර එන්න පුළුවන් (අකාරාත්මක ක්රමය). ඔබේ අරමුණ අනුව සුදුසු ක්රමය තෝරා ගැනීම වැදගත් වේ.
5. වර්ග පරිවර්තන සමඟ උසස් භාවිතා අවස්ථා
වර්ග පරිවර්තන සරල සංඛ්යාත්මක හෝ සත්ය වචන පරිවර්තන සඳහා පමණක් සීමා වන්නේ නැත. එය තත්ය ලෝක පද්ධතිවල විවිධ ප්රායෝගික තත්ත්වයන්හිදීද යෙදිය හැකිය. මෙම කොටස සාමාන්යයෙන් භාවිතා වන උසස් කේස් සහ ඒවායේ ප්රධාන සලකා බැලීම් හඳුන්වා දෙයි.
5.1 දින වැනි වත්මන් සංස්කරණ සංසන්දනය කිරීම සහ පරිවර්තනය කිරීම
ඔබේ දත්ත සමුදායේ දින YYYYMMDD වැනි ආකෘතිවල සංඛ්යාත්මක හෝ සත්ය වචන වර්ගවල දින සංරක්ෂණය කර ඇත්නම්, සරල සත්ය වචන සංසන්දනය සෑම විටම අපේක්ෂිත ලෙස හැසිරෙන්නේ නැත.
එවැනි අවස්ථාවලදී, CAST() භාවිතයෙන් වටිනාකම සංඛ්යාත්මක වර්ගයකට පරිවර්තනය කිරීමෙන් නිවරදි කාලානුක්රමික වර්ගීකරණය සහ සංසන්දනය සක්රිය වේ.
SELECT *
FROM events
ORDER BY CAST(event_date AS UNSIGNED);
-- Values such as '20240501', '20240502', etc. are sorted in date order
ඔබට REPLACE() ශ්රිතය සමඟ මෙය ඒකාබද්ධ කර '2024-05-01' වැනි ඩැෂ් වෙන් කළ දින වචන සම්භාව්ය සංඛ්යාවන් බවට පරිවර්තනය කළ හැක.
SELECT CAST(REPLACE('2024-05-01', '-', '') AS UNSIGNED);
-- Result: 20240501
5.2 ENUM වර්ග හෝ කේත වටිනාකම් සංඛ්යාත්මකව වර්ගීකරණය කිරීම
සංඛ්යාත්මක අර්ථයක් නියෝජනය කරන ENUM වර්ග හෝ කේත වටිනාකම් සඳහා, ඔබට ඒවා වචනමය වර්ගීකරණයට වඩා සංඛ්යාත්මක අනුපිළිවෙලකින් වර්ගීකරණය කිරීමට අවශ්ය විය හැක. වර්ගීකරණයට පෙර CAST() භාවිතයෙන් ඒවා සංඛ්යාත්මක වර්ගවලට පරිවර්තනය කිරීමෙන්, ඔබට ස්වභාවික අනුපිළිවෙලක් ලබා ගත හැක.
SELECT *
FROM products
ORDER BY CAST(product_code AS UNSIGNED);
5.3 සාගමනය සහ දත්ත ආකෘතිකරණයේ භාවිතය
උදාහරණයක් ලෙස, විකුණුම් මුදල් VARCHAR ලෙස සංරක්ෂණය කර ඇත්නම්, SUM() තුළ ඒවා පැහැදිලිව පරිවර්තනය කිරීමෙන් නිවරදි මුළු එකතුවක් ලබා ගත හැක.
SELECT SUM(CAST(sales_amount AS SIGNED)) AS total_sales
FROM sales_data;

5.4 නිරවද්යතාව සහ වර්ග තේරීමේ ගැටලු වැළැක්වීම
දශමස්ථාන හෝ විශාල සංඛ්යාත්මක වටිනාකම් සඳහා, DECIMAL වර්ගයට පරිවර්තනය කිරීම නිරවද්යතාව සුරැකීමට උපකාරී වේ.
ඔබේ දත්තවල ඍණාත්මක වටිනාකම් පවතිනු ඇතිද යන්න අනුව SIGNED සහ UNSIGNED අතර තේරීම වැදගත් වේ.
SELECT CAST('1234.567' AS DECIMAL(10, 3));
-- Result: 1234.567
5.5 දෝෂ හෝ නිවරදි නොවන දත්ත හඳුනා ගැනීම
පරිවර්තනය අපේක්ෂිත නොවන NULL හෝ 0 වටිනාකම් ලබා දෙන්නේ නම්, මෙය නිවරදි නොවන දත්තයක් පෙන්විය හැක.
උදාහරණයක් ලෙස, සත්ය වචනයක් සංඛ්යාවකට පරිවර්තනය කළ නොහැකි නම්, SQL ආකාරය අනුව CAST() 0 හෝ NULL ආපසු ලබා දිය හැක.
එවැනි අවස්ථාවලදී, පරිවර්තන ප්රතිඵල පරීක්ෂා කිරීමෙන් දත්ත පිරිසිදු කිරීම හෝ සත්යාපනයේ අවශ්යතා හඳුනා ගැනීමට උපකාරී වේ.
SELECT original, CAST(original AS SIGNED) AS converted
FROM test_data
WHERE CAST(original AS SIGNED) = 0 AND original <> '0';
-- Extract only data that cannot be properly converted to numeric values
6. CAST සහ CONVERT අතර වෙනස්කම්
MySQL හි වර්ග පරිවර්තනය කිරීමේදී, ඔබ සාමාන්යයෙන් CAST ශ්රිතය හෝ CONVERT ශ්රිතය භාවිතා කරන්නේ. ඒවා සමාන ලෙස පෙනුනද, භාවිතය සහ ලක්ෂණවල වෙනස්කම් තිබේ. මෙම කොටස ඒවායේ වෙනස්කම් සහ ඒවා අතර තේරීම ගැන පැහැදිලි කරයි.
6.1 මූලික වෙනස්කම්
- CAST ශ්රිතය
CAST(value AS type)ව්යාකරණය භාවිතා කරමින් වටිනාකමක් නිශ්චිත වර්ගයකට පැහැදිලිව පරිවර්තනය කරයි. එය සම්මත SQL හි නිර්වචනය වී ඇති අතර බොහෝ දත්ත සමුදාය පද්ධතිවල සමාන ලෙස ක්රියා කරයි.SELECT CAST('123' AS SIGNED); - CONVERT ශ්රිතය
CONVERT(value, type)ව්යාකරණය භාවිතා කරමින් වටිනාකමක් නිශ්චිත වර්ගයකට පරිවර්තනය කරයි. MySQL හි, එය අක්ෂර සමූහ පරිවර්තනය සඳහාද භාවිතා කළ හැක.SELECT CONVERT('123', SIGNED); -- Type conversion SELECT CONVERT('hello' USING utf8mb4); -- Character set conversion
6.2 සම්මත SQL සමඟ සමගිය
CAST ජාත්යන්තර SQL සම්මතයේ කොටසක් වන බැවින්, එය අනෙකුත් දත්ත සමුදායන්ට (PostgreSQL, SQL Server, සහ Oracle වැනි) හොඳ ස්ථානගත කිරීමක් ලබා දෙයි. අනෙක් අතට, CONVERT MySQL-විශේෂිත දිගුකිරීම් ඇතුළත් වේ, විශේෂයෙන් අක්ෂර සමූහ පරිවර්තනය සඳහා, CONVERT(expr USING charset_name) වැනි ව්යාකරණය භාවිතා කරමින්.
6.3 ඒවා අතර තේරීම ගැන
- වර්ග පරිවර්තනය සඳහා (අංක, පද, දිනයන්, ආදිය) බොහෝ අවස්ථාවල,
CASTභාවිතා කිරීම ආරක්ෂිතම තේරීමයි. එය ප්රමිතිය SQL, ඉතා පෝර්ට්බල්, සහ අනාගත දත්ත ගබඩා මාරු කිරීම් සඳහා සුදුසුය. - අක්ෂර සමුහ පරිවර්තනය සඳහා (උදා: sjis සිට utf8mb4) ඔබට
CONVERT(expr USING charset_name)භාවිතා කළ යුතුය. - MySQL-විශේෂ හෝ විශේෂ අවස්ථා සඳහා
CONVERTඅතිරේක සවිස්තරයක් ලබා දිය හැකි නමුත් සාමාන්ය අරමුණු සඳහා,CASTසමඟ ආරම්භ කර, අවශ්ය වන විට පමණක්CONVERTභාවිතා කරන්න.
6.4 Sample Comparison
-- Type conversion using CAST (convert to integer)
SELECT CAST('456' AS SIGNED);
-- Type conversion using CONVERT
SELECT CONVERT('456', SIGNED);
-- Character set conversion using CONVERT
SELECT CONVERT('Hello' USING utf8mb4);
6.5 Important Notes
- පරිවර්තනය අසාර්ථක වූ විට, දෙකම
NULLහෝ0ආපසු ලබා දිය හැක. - අක්ෂර සමුහ පරිවර්තනය
CASTසමඟ කළ නොහැක. - SQL මාදිලිය හෝ MySQL අනුවාදය අනුව හැසිරීම වෙනස් විය හැක, එබැවින් සංවර්ධන සහ නිෂ්පාදන පරිසර දෙකම සෑම විටම පරීක්ෂා කරන්න.
7. Important Notes and Best Practices
MySQL හි පද සහ සංඛ්යා වර්ග පරිවර්තනය භාවිතා කරන විට, සැලකිල්ලට ගත යුතු බොහෝ සම්භාව්ය ගැටළු ඇත. මෙම කොටස ගැටළු වැළැක්වීමට සහ ආරක්ෂිත, නිවැරදි භාවිතය තහවුරු කිරීමට උපකාරී හොඳ පුරුදු මාර්ගෝපදේශ ඉදිරිපත් කරයි.
7.1 Errors or Unexpected NULL/0 from Invalid Conversions
වර්ග පරිවර්තනය සිදු කරන විට, මූලික අගය නිවැරදි ආකෘතියේ නොමැති නම්, MySQL අනපේක්ෂිත NULL හෝ 0 අගයන් ලබා දිය හැක.
SELECT CAST('abc' AS SIGNED) AS result;
-- Result: 0 (default MySQL behavior)
ඉහත පෙන්වා ඇති පරිදි, සංඛ්යාත්මක නොවන පදයක් සංඛ්යා වර්ගයකට පරිවර්තනය කිරීම 0 ලෙස ප්රතිඵල දේ. එබැවින් පරිවර්තනයට පෙර මුල් දත්ත වල අනිත්ය අගයන් නොමැති බව සෑම විටම තහවුරු කරන්න.
SQL මාදිලි සැකසුම් අනුව, පරිවර්තනය දෝෂයක් හෝ NULL එකක් ලබා දිය හැක. ඔබේ නිෂ්පාදන පරිසරයේ සැකසුම් සෑම විටම තහවුරු කරන්න.
7.2 Choosing Precision and Signed/Unsigned Types
- දශම අගයන් අඩංගු අගයන් සඳහා,
DECIMALහෝFLOATවෙත පරිවර්තනය කරන්න - ඍණ අගයන් ඇති විය හැකි නම්,
SIGNEDභාවිතා කරන්න; අගයන් පූර්ණ ධන සංඛ්යා පමණක් නම්,UNSIGNEDභාවිතා කරන්න
ඔබේ දත්ත ලක්ෂණ අනුව සෑම විටම සුදුසු වර්ගය තෝරන්න.
7.3 Impact on Indexes
WHERE හෝ ORDER BY කොටස් වල CAST හෝ CONVERT වැනි වර්ග පරිවර්තන ක්රියාකාරකම් භාවිතා කිරීම, දර්ශක (index) භාවිතය තහනම් කර, කාර්ය සාධනය අඩු වීමට හේතු විය හැක.
SELECT * FROM users WHERE CAST(user_id AS SIGNED) = 1000;
-- Even if user_id has an index, it is often not used
විශාල දත්ත කට්ටල හෝ කාර්ය සාධන-අත්යවශ්ය විමසුම් සඳහා, අනිවාර්ය නොවන පරිවර්තන වලින් වැළැක්වීමට, සැකසුම් නිර්මාණයේ තීරුවේ වර්ග එකම කිරීම හොඳම ක්රමය වේ.
7.4 Do Not Over-Rely on Implicit Conversion
MySQL හි අස්පෂ්ට වර්ග පරිවර්තනය පහසුය, නමුත් එය අනිච්ඡිත හැසිරීමකට හේතු විය හැක. වැදගත් තර්ක සඳහා, සෑම විටම සපැහැදිලි CAST හෝ CONVERT භාවිතා කරන්න.
SELECT '100a' + 20;
-- Result: 100 (only the leading numeric portion is used)
සුක්ෂ්ම දෝෂ සහ දත්ත අසමතුලිතතා වලින් වැළැක්වීමට, සපැහැදිලි පරිවර්තනයක් පුරුද්දක් කරගන්න.
7.5 Validate Types at Data Input Stage
ඔබේ දත්ත ගබඩාව සැලසුම් කරන විට, සංඛ්යා දත්ත සංඛ්යා වර්ග ලෙස, පද දත්ත පද වර්ග ලෙස ගබඩා කරන්න. නිසි සැකසුම් නිර්මාණය මඟින් පරිවර්තන අවශ්යතාවය අඩු කිරීම, ගැටළු වැළැක්වීමට ඉතා ප්රභල ක්රමයක් වේ.
8. Summary
MySQL හි පද සහ සංඛ්යා අතර වර්ග පරිවර්තනය දෛනික දත්ත සැකසීම, එකතු කිරීම, සහ පද්ධති මෙහෙයුම් වල අත්යවශ්ය මාතෘකාවකි. මෙම ලිපියේ, මූලික භාවිතයෙන් උසස් තාක්ෂණ සහ වැදගත් අවධානම් දක්වා සියල්ල ආවරණය කර ඇත.
පද-අංක පරිවර්තනය සඳහා, CAST සහ CONVERT වැනි සපැහැදිලි ක්රම තිබේ. අස්පෂ්ට පරිවර්තනය ප්රායෝගිකව බහුලව භාවිතා කරන නමුත්, සපැහැදිලි පරිවර්තනය ප්රමුඛ කර ගැනීම විශ්වාසනීයතාවය සහ දත්ත ගුණාත්මකභාවය වැඩි කරයි. එසේම, අංක-පද පරිවර්තනයද ID, කේත, සහ ප්රතිදාන පණිවුඩ නිර්මාණය සඳහා පුළුල් ලෙස භාවිතා වේ.
එසේම, දිනය-සම්බන්ධ යෙදුම්, සාගමනය සහ වර්ගීකරණය, සහ දෝෂ හඳුනාගැනීම වැනි තාක්ෂණයන් වාස්තවික ලෝක තත්ත්වයන්හි වර්ග පරිවර්තනයේ බලවත්කම කෙසේදැයි පෙන්වයි. කෙසේ වෙතත්, පරිවර්තනයද බලාපොරොත්තු වන අඩුපාඩු සහ කාර්ය සාධනයට බලපෑම් ගෙන එයි. ඉහත සාකච්ඡා කළ හොඳම පිළිවෙත් සැමවිටම අනුගමනය කරන්න.
වර්ග පරිවර්තනය නිවැරදිව තේරුම් ගැනීමෙන්, ඔබට MySQL හි දත්ත කළමනාකරණය කිරීමේ හැකියාව බෙහෙවින් විස්තාර කළ හැක.
අපි මෙම ලිපිය ඔබගේ දෛනික කාර්යයන් සහ ඉගෙනීමට සහාය වේවි යැයි අපේක්ෂා කරමු.
9. FAQ (පොදු ප්රශ්න)
Q1. ‘abc’ වැනි විලේෂණයක් CAST කළහොත් කුමක් සිදුවේද?
MySQL හි, විලේෂණයක් සංඛ්යාත්මක වර්ගයකට (උදාහරණයක් ලෙස SIGNED හෝ UNSIGNED) පරිවර්තනය කිරීමට උත්සාහ කළ විට, එහි තිබේ නම් ප්රමුඛ සංඛ්යාත්මක කොටස ආපසු ලබා දෙයි; නැතහොත්, එය 0 ලෙස ආපසු ලබා දෙයි.
SELECT CAST('abc' AS SIGNED); -- Result: 0
SELECT CAST('123abc' AS SIGNED); -- Result: 123
කෙසේ වෙතත්, SQL මෝඩය (උදාහරණයක් ලෙස, STRICT_TRANS_TABLES) අනුව, ප්රතිඵලය දෝෂයක් හෝ NULL විය හැක.
Q2. මට CAST හෝ CONVERT භාවිතා කළ යුතුද?
සාමාන්ය වර්ග පරිවර්තන සඳහා (සංඛ්යා, විලේෂණ, දින ආදිය), CAST භාවිතා කිරීම නිර්දේශ කෙරේ මන්ද එය සම්මත SQL හි අනුකූල වන බැවිනි. අක්ෂර සමූහ පරිවර්තනය සඳහා, USING කොටස සමඟ CONVERT ශ්රිතය භාවිතා කළ යුතුය. ඔබගේ භාවිතය අනුව තෝරන්න.
Q3. අනුකූල වර්ග පරිවර්තනය ප්රමාණවත්ද?
අනුකූල පරිවර්තනය කුඩා විමර්ශන හෝ පරීක්ෂණ සඳහා ක්රියා කළ හැකි වුවද, නිර්ණායක සාගමනය සහ නිෂ්පාදන පද්ධති සංවර්ධන සඳහා, ප්රකාශිත පරිවර්තනය (CAST හෝ CONVERT) දැඩි ලෙස නිර්දේශ කෙරේ. ප්රකාශිත පරිවර්තන ලිවීම අනපේක්ෂිත හැසිරීම් සහ දෝෂ වළක්වා ගැනීමට උපකාරී වේ.
Q4. WHERE හෝ ORDER BY හි වර්ග පරිවර්තනය භාවිතා කිරීම දර්ශක අක්රිය කරනවාද?
ඔව්. CAST හෝ CONVERT වැනි ශ්රිත යෙදීමෙන් කොලමකට MySQL එම කොලමේ නිර්වචනය කළ දර්ශක භාවිතා කිරීම වැළැක්විය හැක.
විශාල දත්ත සමූහවල ඉහළ කාර්ය සාධනය සහිත විමර්ශන අවශ්ය නම්, කොලම වර්ග ඉදිරියෙන් ඒකාබද්ධ කරන්න හෝ උපවිමර්ශන හෝ ජනනය කළ කොලම් භාවිතා කිරීම සලකා බලන්න.
Q5. දශමස්ථ ගණිතයන් හෝ විශාල සංඛ්යා සඳහා වර්ග පරිවර්තනය ආරක්ෂිතද?
DECIMAL හෝ FLOAT භාවිතා කිරීමෙන් නිරවද්යතාව සුරැකීමට හැකි වුවද, වටාරණ දෝෂ, නිරවද්යතා නාශය, හෝ කෙලින්ම කපා දමාමය දෝෂ තවමත් සිදුවිය හැක. ඔබගේ අවශ්යතා සඳහා ප්රමාණවත් නිරවද්යතාව සහ පරිමාණය නිර්දේශ කරන්න.
Q6. විලේෂණයක් ලෙස වර්ගීකරණය සහ සංඛ්යාවක් ලෙස වර්ගීකරණය අතර වෙනස කුමක්ද?
විලේෂණයක් ලෙස වර්ගීකරණය කළ විට, ’10’ වැනි වටි ‘2’ එකට පෙර එන්නට පුළුවන් lexicographical අනුපිළිවෙල නිසා. ඔබට සංඛ්යාත්මක අනුපිළිවෙල අවශ්ය නම්, සැමවිටම වර්ගීකරණයට පෙර වර්ග පරිවර්තනය කරන්න.


