ورود

View Full Version : جدا کردن 3 رقم 3 رقم اعداد برای مقادیر پول



mohsenm66
چهارشنبه 07 دی 1390, 18:19 عصر
من یک جدول دارم که در آن یک فیلد مبلغ دارم که نوع آن int است حالا میخواهم با یه دستوری آن عدد را به صورت 3 رقم 3 رقم جدا کنم و نمایش بدهم .
آیا چنین دستوری در sql وجود دارد یا خیر ؟

یوسف زالی
پنج شنبه 08 دی 1390, 00:33 صبح
سلام.
معمولا بهتره این کار ها در UI انجام بشه.
به دلیل اینکه ممکنه کسی بعدا در برنامه لازم داشته باشه روی اون محاسباتی انجام بده.
اما برای سمت اس کیو ال باید یک تابع بنویسید.
من این تابع رو نوشتم و براتون می گذارم:
79854

مثال برای استفاده از اون:
select dbo.GetSeparatedNumber(YourField, ',') -- sql

قابلیت کار با داده های اعشاری و منفی رو هم داره.
طبق استاندارد حسابداران منفی ها رو در پرانتز نمایش می ده.
می تونید کاراکتر جداکننده رو هم خودتون انتخاب کنید.
موفق باشید.

mohsenm66
جمعه 09 دی 1390, 08:36 صبح
ببخشید سوالم خیلی ابتدایی است
این تابع را باید در کجا اضافه کنم (در کدام قسمت از توابع )

یوسف زالی
جمعه 09 دی 1390, 14:52 عصر
یک کوئری باز کنید و اون رو ران کنید.
خودش اضافه می شه

mohsenm66
دوشنبه 12 دی 1390, 16:32 عصر
دوست عزیز تابع شما 3 رقم از عدد را حذف میکنه . فیلد من از نوع int هست ولی فیلد شما از نوع decimal است . من با اجازه شما نوع فیلد را در تابع تغییر دادم ولی باز هم فرقی نکرد . نمیدانم باید چیکار کنم که این مشکل حل بشه. ممنون میشم راهنماییم کنید.

یوسف زالی
دوشنبه 12 دی 1390, 17:56 عصر
آخ آخ یادم رفت بگم!
عددتون رو در هزار ضرب کنید.
select dbo.GetSeparatedNumber(YourField*1000, ',') -- sql

موفق باشید.

mohsenm66
سه شنبه 13 دی 1390, 17:23 عصر
آیا باید نوع را از decimal به int تغییر بدم یا به همون صورتی که هست در 1000 ضرب کنم ؟

mehdi.mousavi
سه شنبه 13 دی 1390, 17:32 عصر
سلام.
برای اینکار (جدا کردن ارقام سه رقم سه رقم) نیازی به تعریف و استفاده از تابعی مجزا نیست. کافیه تا بدین شکل عمل کنیم:

SELECT CONVERT(VARCHAR, CAST(1234567890 AS MONEY), 1)

خروجی Select فوق، رشته 1,234,567,890.00 خواهد بود.

موفق باشید.

پاورقی: مقادیر رو تحت Money Data Type نگهداری کنید، نه int.

mohsenm66
سه شنبه 13 دی 1390, 18:08 عصر
حالا چطوری میشه 2 رقم اعشار را حذف کرد ؟

mehdi.mousavi
سه شنبه 13 دی 1390, 19:15 عصر
حالا چطوری میشه 2 رقم اعشار را حذف کرد ؟


DECLARE @Value NVARCHAR(MAX);
SET @Value = CONVERT(VARCHAR, CAST(1234567890.96 AS MONEY), 1)
SET @Value = SUBSTRING(@Value, 0, LEN(@Value) - 2)