# پایگاه‌های داده > SQL Server > سوال: تبدیل مقادیر در هنگام واکشی(select)

## baran_mehr

سلام به همه دوستان عزیز
من تو درون فیلدها اطلاعات رو به صورت باینری (0و1) ذخیره کردم
میخوام بدونم میتونم هنگام select بیام طوری دستورمو بنویسم که خودش اطلاعات رو برگردونه به حالت اول :متفکر:

----------


## حمیدرضاصادقیان

سلام.
بله شما میتونید با استفاده از دستور Case در داخل select هر چیزی رو نمایش بدید.
مثال :

select id,case When Typ=0 then  'بدهکار' else 'بستانکار' end as TypeSanad from Table1

----------


## baran_mehr

سلام اقای صادقیان
نه منظورم این نبود
فرض کنید من یه رشته دارم به صورت 001011101011011 و میخوام مثلا 4 تا 4 تا جداشون کنیم و معادل هرکدومشون رو بزارم
مثلا اگر 0010 بود بزاره A و .. 
برای جدا کردن هم از ابتدای این رشته باینری شروع کنه
منظورم این بود

----------


## Modifier

سلام



> فرض کنید من یه رشته دارم به صورت 001011101011011 و میخوام مثلا 4 تا 4 تا جداشون کنیم و معادل هرکدومشون رو بزارم
> مثلا اگر 0010 بود بزاره A و ..


من اینطور فکر میکنم که احتمالا چیزی نیست که این رشته کد باینری رو بهش بدی و مقدار اولش رو برگردونه ...
فکر کنم بهتره یه Function بنویسی که که رشته رو بهش پاس بدی و با فرمتی که میخوای پردازشش کنی...حالا چه توی Sql Server یا ....

----------


## baran_mehr

من این کار رو دارم انجام میدوم تو ویژوال
میخوام تو sql این اتفاق بیفته حالا با تابع یا هر چیز دیگه ای
فقط میخوام قدرت اینو داشته باشه که وقتی select رو مینویسم بتونه کارهایی که میخوام رو انجام بده و نتیجه رو برگردونه

----------


## حمیدرضاصادقیان

سلام. شما باید یک تابع بنویسی که ورودیش یک مقدار رشته ای باشه که مقدار فیلدت رو بدی.
در داخل اون یک متغیر تعریف میکنی و طول رشته رو بهش پاس میدی.
در داخل یک حلقه با استفاده از Substring میتونی این رشته رو به صورت 4 رقم 4رقم جدا کرده و خروجی مورد نظر رو در یک رشته دیگه ذخیره کنی.
در نهایت نتیجه خروجی تابع شما میشه مقدار نهایی تولید شده.

----------


## baran_mehr

خوب فرض کنید یک تابع نوشتم با نام Dcode که ورودیش یک رشته باینری و خروجیش یک رشته تبدیل شده بود
حالا چطور باید از این تابع داخل select استفاده کنم!!

----------


## ASKaffash

سلام
اگر decode شما برای موضوع امنیتی است اصلا الگوریتم را سمت SQLServer ننویسید در غیر اینصورت چند روش وجود دارد
1- با استفاده از فیلد محاسباتی
2- با استفاده از تابع مثلا بنام Dc و روش استفاده :
Select X=dbo.dc(FldName),... From T

----------


## baran_mehr

بله برای امنیت اطلاعات دارم این کار رو میکنم
میخوام بدونم اگر این کار رو طرف sql بنویسم سرعت من بالاتر میره یا نه؟
و آیا میشه این تابع رو داخل برنامه vb نوشت و توی همون vb زمانی که دارم دستور select رو بنویسم اون تابع رو فراخونی کنم.
الان من مجبورم اطلاعات رو داخل گرید بیارم و تک تک سطر و ستون ها رو تبدیل به رشته اصلی کنم، فکر کنم اطلاعات که حجمش زیاد بشه این روش چندان کارا نباشه

----------


## ASKaffash

سلام
بستگی به Client ها دارد اگر Client ها خوب باشند در سمت Vb سرعت بیشتر است 
اگر بانک اکسس بود می شد ولی در بانک SQLServer شما تابع درون زبان برنامه نویسی را نمی توانید به خورد SQLServer دهید
از گرید VB.NET استفاده می کنید ؟

----------


## ricky22

از CLR Integration هم می تونید استفاده کنید.

----------


## baran_mehr

> بستگی به Client ها دارد اگر Client ها خوب باشند در سمت Vb سرعت بیشتر است


منظور از خوب بودن سرعت دستگاه هست؟



> اگر بانک اکسس بود می شد ولی در بانک SQLServer شما تابع درون زبان برنامه نویسی را نمی توانید به خورد SQLServer دهید


منظورم این نیست که تابع رو که تو vb نوشتم تو sqlserver فراخونی کنم میخوام تو همون vb یه تابعی رو که نوشتم تو دستور select که تو همون vb هست بدوم، منظورم زمانی هست که با کد دارم به بانک وصل میشم



> از گرید VB.NET استفاده می کنید ؟


از گرید برای نمایش استفاده میکنم اما داده هارو قبل از اتصال به گرید توی خود datatable تغییر میدم



> از CLR Integration هم می تونید استفاده کنید.


 نمیدونم چی هست

----------


## ASKaffash

سلام
بهترین روش همان است که در یک فیلد جدا در DataTable برگشتی مقدار را محاسبه می کنید (پردازش سمت Client و روی Ram در حال انجام است)

----------

