PDA

View Full Version : مشكل اعداد فارسي در كار با ديتا



sajjad_kochekian
یک شنبه 19 دی 1389, 19:27 عصر
سلام
من يكسري اطلاعات از اكسل دريافت كرده ام داخل SQL حالا بعضي از فيلد هاي اعداد آن به صورت فارسي
چطور مي تونم آنها را انگليسي كنم.

چون كار كردن با اون اعداد مشكل داره

AminSobati
دوشنبه 20 دی 1389, 01:35 صبح
سلام دوست عزیزم،
حدس میزنم به تنظیمات ویندوزتون مربوط بشه

sajjad_kochekian
دوشنبه 20 دی 1389, 22:58 عصر
من داخل همان فیلد اگر یک بار همان عدد را تایپ کنم عدد ها انگلیسی می شه؟
پس فکر نکنم از ویندوز باشه

Reza_Yarahmadi
سه شنبه 21 دی 1389, 08:05 صبح
در صورتي كه به تنظيمات ويندوز مربوط نباشه به احتمال زياد نوع فيلد بصورت رشته اي است و اعداد با كاراكترهاي يونيكد مقدار گرفتن.
براي برطرف كردن مشكل ابتدا تابعي بصورت زير تعريف كنيد

CREATE FUNCTION Replacer
(
@Str nvarchar (max)
)
RETURNS nvarchar (max)
AS
BEGIN
Select @Str =
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
@Str , NChar(0x06F0), NChar(0x0030))
,NChar(0x0660), NChar(0x0030))
,NChar(0x06F1), NChar(0x0031))
,NChar(0x0661), NChar(0x0031))
,NChar(0x06F2), NChar(0x0032))
,NChar(0x0662), NChar(0x0032))
,NChar(0x06F3), NChar(0x0033))
,NChar(0x0663), NChar(0x0033))
,NChar(0x06F4), NChar(0x0034))
,NChar(0x0664), NChar(0x0034))
,NChar(0x06F5), NChar(0x0035))
,NChar(0x0665), NChar(0x0035))
,NChar(0x06F6), NChar(0x0036))
,NChar(0x0666), NChar(0x0036))
,NChar(0x06F7), NChar(0x0037))
,NChar(0x0667), NChar(0x0037))
,NChar(0x06F8), NChar(0x0038))
,NChar(0x0668), NChar(0x0038))
,NChar(0x06F9), NChar(0x0039))
,NChar(0x0669), NChar(0x0039))
Return @Str;
ENDبعد دستور آپديتي روي فيلد(ها)ي مورد نظرتون بصورت زير بنويسيد

Update TableName Set FieldName = dbo.Replacer(FieldName)بعد از انجام اين مراحل نوع فيلد موزد نظر رو به عددي تغيير بديد.


يك پيشنهاد:
تا جايي كه ممكنه از Import/Export براي كارهاتون استفاده نكنيد. دليل اين حرف هم اينه كه SQL Server توي اين زمينه ايرادهاي زيادي داره ، براي نمونه تعيين نوع فيلدهاي جدولهاست كه بر اساس چند سطر اول اين كار رو انجام ميده مثلا در صورتي كه نوع يك فيلد رشته اي باشه و چند سطر اول شيت عدد باشه نوع فيلد رو عدد در نظر ميگيره و مقدار هاي غير عددي رو NULL ذخيره ميكنه.
براي import كردن ، دستورات ...Insert into رو به شيت مورد نظر اضافه كنيد و براي همه ركوردها دستورات رو قرار بديد ، بعد همه سطرها رو كپي كنيد و بصورت يك اسكريپت دربياريد. اسكريپت حاصل رو اجرا كنيد تا ركوردها اضافه بشه.
براي Export كردن هم بهتره كه باز هم يك اسكريپت بسازيد.