0 0 تومان
آموزش طراحی سایت (HTML CSS Javascript) | آتریا
آموزش سی شارپ

جدا کردن 3 به 3 ارقام در SQL Server

  • جدا کردن 3 به 3 ارقام در SQL Server

    جدا کردن 3 به 3 ارقام در SQL Server

    جدول Products را در زیر داریم:

    Prod_Id ProductName Unit UnitPrice
    1 Jarlsberg 1000 g 120000
    2 Mascarpone 1000 g 9505000
    3 Gorgonzola 1000 g 60200000

    می خواهیم نام محصولات (product name) و قیمت (price) را به صورت 3 رقم 3 رقم، جدا شده با ویرگول نمایش دهیم:

    از کوئری زیر استفاده می کنیم:

    SELECT ProductName, 
     LEFT(CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1), 
          LEN(CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1)) - 3 
         )as UnitPrice  
    FROM Products

    نتیجه به شکل زیر خواهد بود :

    ProductName UnitPrice
    Jarlsberg 120,000
    Mascarpone 9,505,000
    Gorgonzola 60,200,000

    کوئری بالا چگونه کار می کند؟

    در این کوئری، برای ساخت فیلد "UnitPrice" از چهار تابع به صورت زیر استفاده شده است:

    1- cast: با استفاده از این تابع فیلد UnitPrice را به نوع MONEY تبدیل می کنیم:

    CAST(UnitPrice AS MONEY)

    2-convert: در این مرحله عبارت بالا را به نوع VARCHAR تبدیل می کنیم و البته ویرگول ها در این مرحله اضافه می شود:

    CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1)

    سوال: چرا پارامتر سوم را با مقدار 1 تنظیم کردیم؟ 

    زمانی که در تابع ()convert، عبارتی که می خواهیم تبدیل کنیم از نوع money یا smallmoney باشد، پارامتر سوم می تواند یکی از مقادیر نشان داده شده در جدول زیر باشد:

    مقدار خروجی

    0 (پیشفرض)

    ویرگول در نظر گرفته نمی شود و دو رقم اعشار(سنت) در نظر گرفته می شود مانند: 4235.19

    1

    هر سه رقم با ویرگول جدا می شود و دو رقم به عنوان اعشار در نظر گرفته می شود. مانند: 3,510.92

    2

    ویرگول در نظر گرفته نمی شود و چهار رقم اعشار در نظر گرفته می شود مانند: 4235.9819

    126

    معادل سبک 2 می باشد البته وقتی که در حال تبدیل کردن به نوع char یا varchar هستیم

    بنابراین تا اینجای کار، هر سه رقم با ویرگول جدا شده ولی دو رقم اعشار اضافه داریم، در دو مرحله بعدی، قسمت اعشار را نیز حذف می کنیم...!

    3- len: با استفاده از این تابع، تعداد کل کاراکترهای خروجی تابع convert را بدست می آوریم:

    LEN(CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1))

    4-left: در این مرحله با کمک تابع قبلی، 3 کاراکتر اضافی سمت راست(دو رقم اعشار و یک ممیز) را حذف می کنیم، در واقع از سمت چپ به تعداد کل کاراکترها، منهای سه کاراکتر را جدا می کنیم:

    LEFT(CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1), 
            LEN(CONVERT(VARCHAR, CAST(UnitPrice AS MONEY), 1)) - 3 
          )

    نکته:در ASP.NET اگر از کنترل Gridview استفاده کردید، برای نمایش ویرگول در ستون مربوط به قیمت می توان بجای کوئری بالا، خصوصیت زیر را برای آن تنظیم کرد:

    DataFormatString="{0:N0}"


    برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.