PDA

View Full Version : سوال: جدا كردن سه رقم سه رقم فيلدهاي عددي درديتابيس



MR.Karami
دوشنبه 16 آذر 1388, 09:23 صبح
با سلام
من مي خوام توسط يك stored perocedures فيلدهاي عددي(پولي)را به صورت 3 رقم 3رقم نشان بدم.
جه جوري ميتونم اين كار را انجام بدم؟




با تشكر:لبخندساده:

DataMaster
دوشنبه 16 آذر 1388, 09:37 صبح
فکر میکنم این کار رو تو لایه اپلیکیشن انجام بدید خیلی بهتره
البته بقیه دوستان چه راهنمایی میکنند؟؟

حسین شهریاری
دوشنبه 16 آذر 1388, 10:13 صبح
سلام
اگه از دلفی استفاده میکنین کافیه خاصیت Currency اون فیلد را True کنین.
ولی اگه توی Sql میخاین این کارا بکنین به نظر من اول توسط Cast یا Convert به رشته تبدیلش کنین بعد توسط تابع Substring سه تا سه تا جداش کنین و خروجی هر Substring را با یه کاراکتر ',' جمع کنین

بهنام بهمنی
دوشنبه 16 آذر 1388, 10:17 صبح
در SQL مي توانيد تابع زير را ايجاد کرده و بعد آنرا در هنگام لزوم فراخواني کنيد .


SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[ToDigitGroup](@Digit numeric(18,4) ) Returns char(20) AS
begin
declare @strDigit varchar(30)
declare @StrAfterDot varchar(30)
set @StrAfterDot = ''
set @strDigit = cast(@Digit as varchar(30))

if CHARINDEX('.' , @strDigit) > 0
begin
set @StrAfterDot = right(@strDigit , len(@strDigit) - CHARINDEX('.' , @strDigit)+1)
set @strDigit = REPLACE(@strDigit , @StrAfterDot ,'')
while( right (@StrAfterDot , 1 ) = '0' ) set @StrAfterDot = stuff (@StrAfterDot, len (@StrAfterDot) , 1 ,'' )
if @StrAfterDot = '.' set @StrAfterDot = ''
end
declare @l int
set @l=len(@strDigit)-2
while(@l>0)
begin
set @strDigit = stuff (@strDigit,@l,0,',')
set @l=@l-3
end
if left (@strDigit , 1 ) = ',' set @strDigit = STUFF(@strDigit , 1, 1, '')
return @strDigit + @StrAfterDot
end

ASKaffash
دوشنبه 16 آذر 1388, 10:23 صبح
با سلام
من مي خوام توسط يك stored perocedures فيلدهاي عددي(پولي)را به صورت 3 رقم 3رقم نشان بدم.
جه جوري ميتونم اين كار را انجام بدم؟




با تشكر:لبخندساده:
سلام
سرعت SQLServer را برای اینکارها تلف نکنید حتما در لایه برنامه کاربردی انجام دهید چون فرض بر این است که در یک برنامه Client/Server بخشی از وظایف را باید Client بعهده گیرد و فشار روی سرور باید منطقی باشد

محمد سلیم آبادی
دوشنبه 16 آذر 1388, 11:11 صبح
با سلام
من مي خوام توسط يك stored perocedures فيلدهاي عددي(پولي)را به صورت 3 رقم 3رقم نشان بدم.
جه جوري ميتونم اين كار را انجام بدم؟

سلام دوست عزیز از Convert همراه با امکان Style استفاده کنین:


select CONVERT(varchar(20),cast('2342654541234' as money),1)
--2,342,654,541,234.00

بهنام بهمنی
سه شنبه 17 آذر 1388, 10:15 صبح
تبديل به Money راه حل خوبي است اما مشکل آن عدم امکان کنترل ميزان دقت و يا تعداد اعشار بعد از مميز است.

حسین شهریاری
سه شنبه 17 آذر 1388, 10:34 صبح
بله درسته.ولی به کاراکتر کانورت شده شما میتونین اون چندتا کاراکتر آخری را ازش حذف کنین و اون چیزی را که میخاین استخراج کنین.فکر کنم با تابع SubString این کار شدنی هست.