کاربرد تابع STR در SQL Server: تبدیل دقیق اعداد به رشتهها
در SQL Server، تابع STR برای تبدیل دادههای عددی از نوع اعشاری (float) به نوع کاراکتری (character) استفاده میشود. این تابع زمانی کاربردی است که نیاز دارید یک عدد را به رشته تبدیل کرده و بر طول و تعداد ارقام اعشار آن کنترل داشته باشید. سینتکس تابع STR به شکل زیر است:
STR (float_expression [, length [, decimal ] ])
این تابع سه پارامتر دارد که دو تای آخر اختیاری هستند: * float_expression: این پارامتر، عبارت عددی از نوع اعشاری است که باید به رشته تبدیل شود. * length: این پارامتر، طول کلی رشته حاصل شامل نقطه اعشار، علامت مثبت یا منفی و ارقام را تعیین میکند. مقدار پیشفرض آن ۱۰ است. * decimal: این پارامتر، تعداد ارقام اعشار در رشته حاصل را مشخص میکند. مقدار پیشفرض آن ۰ است. در سادهترین کاربرد، تابع STR عدد اعشاری را به رشته تبدیل میکند.
SELECT STR(123.45);
با استفاده از پارامتر طول (length)، میتوانید اندازه کلی رشته خروجی را کنترل کنید. اگر طول کمتر از عدد باشد، خروجی ستاره (****) خواهد بود.
SELECT STR(123.45, 7);
SELECT STR(123.45, 5);
SELECT STR(123.45, 4);
پارامتر اعشار (decimal) به شما اجازه میدهد تا تعداد ارقام بعد از نقطه اعشار را مشخص کنید. اگر تعداد اعشار بیشتر از مقدار اصلی باشد، صفر اضافه میشود؛ اگر کمتر باشد، گرد میشود.
SELECT STR(123.456, 10, 2);
SELECT STR(123.456, 10, 0);
SELECT STR(123.456, 10, 4);
تابع STR برای اعداد منفی نیز به درستی کار میکند؛ علامت منفی نیز در طول کلی رشته در نظر گرفته میشود.
SELECT STR(-123.45, 8, 2);
SELECT STR(-123.45, 7, 2);
حتی برای اعداد گرد یا بدون اعشار نیز میتوان از STR استفاده کرد. در این حالت، پارامتر اعشار معمولاً روی صفر تنظیم میشود.
SELECT STR(123, 5, 0);
SELECT STR(123.00, 5, 0);
تابع STR فقط برای ورودیهای عددی طراحی شده است و نمیتواند مستقیماً روی مقادیر رشتهای اعمال شود. تلاش برای استفاده از آن با یک رشته، منجر به خطا خواهد شد.
SELECT STR('Hello'); -- Error
هنگامی که ورودی تابع STR یک مقدار NULL باشد، خروجی نیز NULL خواهد بود.
SELECT STR(NULL);
تابع STR در مقایسه با توابع CONVERT و CAST، کنترل بیشتری بر قالببندی خروجی از نظر طول و دقت اعشار ارائه میدهد. این توابع متفاوت عمل میکنند و STR برای کنترل دقیق بر نمایش عددی به صورت رشتهای، ابزار قدرتمندتری است.
SELECT STR(123.456, 10, 2) AS STR_Result,
CONVERT(VARCHAR(10), 123.456) AS CONVERT_Result,
CAST(123.456 AS VARCHAR(10)) AS CAST_Result;
در حالی که STR بسیار کاربردی است، در مجموعه دادههای بسیار بزرگ یا عملیاتهای حساس به عملکرد، تبدیل انواع داده میتواند گاهی پرهزینه باشد. همیشه عملکرد را در محیط خاص خود آزمایش کنید، به خصوص اگر با تبدیلهای گسترده سروکار دارید. برای تبدیلهای ساده، STR معمولاً کارایی کافی را دارد و یک ابزار بهینه در SQL Server محسوب میشود.