آشنایی جامع با تابع CHAR در SQL Server: راهنمای کاربردی
تابع CHAR در SQL Server برای تبدیل یک کد ASCII یا Unicode (Integer) به کاراکتر مربوطه استفاده میشود. این تابع در انواع سناریوها، از جمله کار با دادههای کاراکتری، پاکسازی اطلاعات و عملیات تبدیل، بسیار مفید است. برای مثال، میتوانید از آن برای ایجاد جداکنندهها در رشتهها یا درج کاراکترهای خاص استفاده کنید.
نحوه استفاده از تابع CHAR با یک مقدار عدد صحیح
تابع CHAR یک عدد صحیح را به عنوان ورودی میگیرد و خروجی آن یک کاراکتر تک بایتی است. رایجترین کاربرد آن تبدیل کد ASCII به کاراکتر متناظر است. به عنوان مثال، برای یافتن کاراکتر متناظر با کد ASCII 65، از دستور زیر استفاده میکنیم:
SELECT CHAR(65);
این دستور کاراکتر ‘A’ را برمیگرداند. میتوانید از این تابع برای تبدیل سایر کدهای ASCII نیز استفاده کنید؛ مثلاً برای کاراکتر ‘a’ که کد ASCII آن 97 است، داریم:
SELECT CHAR(97);
تابع CHAR در SQL با انواع دادههای عددی مختلف
تابع CHAR با انواع دادههای عددی مختلف مانند SMALLINT، INT و BIGINT کار میکند. نوع داده ورودی در نحوه عملکرد تابع CHAR تاثیری ندارد؛ مهم این است که مقدار آن در محدوده مجاز کدهای ASCII قرار گیرد.
DECLARE @smallint_value SMALLINT = 66;
DECLARE @int_value INT = 67;
DECLARE @bigint_value BIGINT = 68;
SELECT
CHAR(@smallint_value) AS CharFromSmallint,
CHAR(@int_value) AS CharFromInt,
CHAR(@bigint_value) AS CharFromBigint;
این کوئری به ترتیب کاراکترهای ‘B’، ‘C’ و ‘D’ را تولید میکند که نشان میدهد تابع CHAR به خوبی با انواع مختلف اعداد صحیح کار میکند.
تابع CHAR در SQL با مقدار عدد صحیح منفی
اگر یک عدد صحیح منفی به عنوان ورودی به تابع CHAR بدهید، نتیجه یک رشته خالی (NULL) خواهد بود. این به این دلیل است که کدهای ASCII از 0 شروع میشوند و مقادیر منفی در محدوده ASCII تعریف نشدهاند. برای مثال:
SELECT CHAR(-10);
خروجی این دستور NULL خواهد بود، زیرا تابع CHAR نمیتواند مقدار منفی را به یک کاراکتر معتبر تبدیل کند.
تابع CHAR در SQL با یک عدد خارج از محدوده ASCII
تابع CHAR تنها میتواند کدهای ASCII را که در محدوده 0 تا 255 هستند، پردازش کند. اگر عددی خارج از این محدوده به آن بدهید، نتیجه یک رشته خالی (NULL) خواهد بود.
SELECT CHAR(256);
در این مثال، چون 256 خارج از محدوده مجاز ASCII است، خروجی NULL خواهد بود. این محدودیت برای حفظ سازگاری با استاندارد ASCII تک بایتی است.
تابع CHAR در SQL که یک رشته خالی برمیگرداند
همانطور که پیشتر ذکر شد، تابع CHAR در صورت دریافت ورودیهای نامعتبر، مانند مقادیر منفی یا مقادیر خارج از محدوده ASCII، NULL برمیگرداند. این رفتار در مدیریت خطا و اطمینان از صحت دادهها بسیار مهم است.
SELECT CHAR(300); -- Returns NULL
SELECT CHAR(-50); -- Returns NULL
در هر دو حالت، خروجی NULL است زیرا مقادیر ورودی در محدوده معتبر کدهای ASCII (0-255) قرار نمیگیرند.
تابع CHAR در SQL برای الحاق رشته
یکی از کاربردهای عملی تابع CHAR، استفاده از آن برای الحاق کاراکترهای خاص به رشتهها یا بین آنها است. برای مثال، میتوانید از آن برای افزودن فاصله (CHAR(32))، اینتر (CHAR(13))، یا تب (CHAR(9)) استفاده کنید تا خروجیهای خواناتری ایجاد کنید.
SELECT 'Hello' + CHAR(32) + 'World'; -- Adds a space
SELECT 'Line1' + CHAR(13) + CHAR(10) + 'Line2'; -- Adds a new line (CRLF)
SELECT 'Col1' + CHAR(9) + 'Col2'; -- Adds a tab character
این روش برای فرمتبندی خروجیها یا ساخت رشتههای پیچیده که نیاز به کاراکترهای کنترلی دارند، بسیار کارآمد است.
تابع CHAR در SQL با مقدار اعشاری
اگر یک مقدار اعشاری به تابع CHAR بدهید، SQL Server به طور خودکار آن را به نزدیکترین عدد صحیح تبدیل میکند و سپس کاراکتر متناظر را برمیگرداند. در واقع، بخش اعشاری نادیده گرفته میشود و فقط قسمت صحیح عدد برای تبدیل استفاده میشود.
SELECT CHAR(65.75);
SELECT CHAR(98.1);
خروجی اولین دستور ‘A’ خواهد بود (زیرا 65.75 به 65 تبدیل میشود) و خروجی دومی ‘b’ خواهد بود (زیرا 98.1 به 98 تبدیل میشود).
تبدیل چندین مقدار عدد صحیح به یک رشته با استفاده از تابع CHAR در SQL
میتوانید از تابع CHAR در کنار تابع STRING_AGG (در SQL Server 2017 به بالا) یا با استفاده از XML PATH برای ترکیب چندین کد ASCII به یک رشته واحد استفاده کنید. این قابلیت برای ساخت پویا رشتهها از مجموعه مقادیر عددی بسیار مفید است.
-- Example using STRING_AGG (SQL Server 2017+)
SELECT STRING_AGG(CHAR(ASCII_Value), '') WITHIN GROUP (ORDER BY ASCII_Value)
FROM (VALUES (72), (69), (76), (76), (79)) AS T(ASCII_Value);
— Example using XML PATH (older SQL Server versions)
SELECT STUFF((SELECT ” + CHAR(ASCII_Value)
FROM (VALUES (72), (69), (76), (76), (79)) AS T(ASCII_Value)
FOR XML PATH(”)), 1, 0, ”);
هر دو دستور بالا رشته ‘HELLO’ را برمیگردانند که از ترکیب کدهای ASCII حروف آن تشکیل شده است. این یک روش قدرتمند برای ساخت رشتهها از دادههای عددی ذخیرهشده است.