كيف أحصل على تدفق بيانات SSIS لوضع "0.00" في ملف مسطح؟

StackOverflow https://stackoverflow.com/questions/2868348

سؤال

لديّ حزمة SSIS مع تدفق بيانات يأخذ مصدر بيانات ADO.NET (مجرد جدول صغير) ، ويقوم بتنفيذ استعلام SELECT * ، ويخرج نتائج الاستعلام إلى ملف مسطح (لقد حاولت أيضًا سحب الجدول بأكمله فقط وعدم استخدام SQL SELECT).

المشكلة هي أن مصدر البيانات يسحب عمودًا يمثل نوع بيانات أموال ، وإذا لم تكن القيمة صفرًا ، فإنها تأتي في الملف المسطح على ما يرام (مثل "123.45") ، ولكن عندما تكون القيمة صفرًا ، فإنها تظهر في الملف المسطح الوجهة باسم ".00". أحتاج إلى معرفة كيفية إعادة الصفر الرائدة إلى الملف المسطح.

لقد جربت العديد من أنواع البيانات للإخراج (في مدير اتصال الملفات المسطح) ، بما في ذلك العملة والسلسلة ، ولكن يبدو أن هذا ليس له أي تأثير.

لقد جربت بيان حالة في Select ، مثل هذا:

  CASE WHEN columnValue = 0 THEN 
     '0.00' 
  ELSE 
      columnValue 
  END

(لا يزال ينتج عنه ".00")

لقد جربت الاختلافات على هذا مثل هذا:

 CASE WHEN columnValue = 0 THEN
     convert(decimal(12,2), '0.00') 
 ELSE 
     convert(decimal(12,2), columnValue) 
 END

(لا يزال ينتج عنه ".00")

و:

 CASE WHEN columnValue = 0 THEN
     convert(money, '0.00') 
 ELSE 
     convert(money, columnValue) 
 END

(نتائج '.00000000000000000')

هذه القضية الصغيرة السخيفة هي Killin 'Me. هل يمكن لأي شخص أن يخبرني كيف أحصل على قيمة قاعدة بيانات نوع بيانات الأموال في ملف مسطح كـ "0.00"؟

هل كانت مفيدة؟

المحلول

هل يمكنك استخدام عمود مشتق لتغيير تنسيق القيمة؟ هل جربت ذلك؟

نصائح أخرى

كنت أواجه نفس المشكلة بالضبط ، وعملت إجابة سو بالنسبة لي. لقد أرسلت بياناتي إلى تحويل عمود مشتق (في صندوق أدوات تحويل تدفق البيانات). أضفت العمود المشتق كعمود جديد من سلسلة البيانات Unicode ([DT_WSTR]) ، واستخدمت التعبير التالي:

السعر <1؟ "0" + (DT_WSTR ، 6) السعر: (DT_WSTR ، 6) السعر

أتمنى أن يساعد ذلك!

لقد استخدمت المحرر المتقدم لتغيير العمود من double-precision float إلى decimal ثم اضبط Scale إلى 2:

enter image description here

نظرًا لأنك تقوم بتصدير ملف نصي ، ما عليك سوى تصدير البيانات المسبقة.

يمكنك القيام بذلك في الاستعلام أو إنشاء عمود مشتق ، مهما كنت أكثر راحة.

اخترت جعل العمود 15 حرفًا واسعًا. إذا قمت بالاستيراد إلى نظام يتوقع أن يتم تجاهل أرقام تلك الأصفار ... فلماذا لا تقوم فقط بتوحيد طول الحقل؟

الحل البسيط في SQL هو كما يلي:

    select 
    cast(0.00 as money) as col1
    ,cast(0.00 as numeric(18,2)) as col2 
    ,right('000000000000000' + cast( 0.00 as varchar(10)), 15) as col3
    go

 col1                  col2                 col3
 --------------------- -------------------- ---------------
                 .0000                  .00 000000000000.00

ما عليك سوى استبدال "0.00" باسم العمود الخاص بك ولا تنسى إضافة من Table_Name ، إلخ ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top