sql - تحويل الطابع الزمني تيراداتا(6)إلى داتيتيم ل سكل سيرفر




sql-server ssis teradata (5)

ربما لأن سكل سيرفر لا يدعم 6 أرقام كسرية، لذلك يلقي بها إلى سلسلة مع 3 أرقام كسرية على تيراداتا:

To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')

أنا أعمل على تصدير البيانات من سسيس، ولدي خطأ اقتطاع في واحدة من مشروعي:

[TH27 [91]] خطأ: "حدث خطأ في اقتطاع اسم العمود هو" ميديت ".

في الإدخال (تيراداتا)، لدي عمود من نوع timestamp(6) ، وفي الإخراج في سكل سيرفر، لدي عمود من نوع datetime .

كيف يمكنني تحويله في الطريقة التي عند استخدام سسيس أنا لا تحصل على هذا النوع من الخطأ؟

محاولتي (الطلب 1):

SELECT 
    column1,
    CAST(CAST(CAST(mydate AS DATE FORMAT 'YYYY-MM-DD') AS CHAR(10)) || ' ' 
             || TRIM(EXTRACT(HOUR FROM (mydate))) || ':'
             || TRIM(EXTRACT(MINUTE FROM (mydate))) || ':'
             || TRIM(CAST(EXTRACT(SECOND FROM (mydate)) AS INTEGER)) AS Date) AS mydate,
    column2
FROM table1

تحديث:

كان الطلب الذي كتبته في مصدر تيراداتا هنا مثالا على مخطط سسيس الخاص بي


إذا mydate هو الطابع الزمني، فقط يلقي عليه:

select column1,
       cast(mydate as datetime) as column2
from MyTable

حسنا، حتى التنفيذ في تيراداتا يعني أنك لم يكن لديك داتيتيم ... ولكن لديك التاريخ والوقت:

select column1,
       cast(mydate as date) as column2date,
       cast(mydate as time) as column2time
from MyTable

يمكنك بعد ذلك استخدام سيس لمعالجة البيانات لدمج التاريخ والوقت في داتيتيم مسكل


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

خارج الولايات المتحدة الأمريكية سوف تعمل قريبا جدا في مثل هذه الأخطاء. العديد من أنظمة التنمية استخدام إعدادات الولايات المتحدة أيضا سهولة التصفح لرسائل الخطأ، ولكن نظام العملاء يعمل تحت إعدادات اللغة المحلية وفي أسوأ الأحوال على إعدادات اللغة المختلفة لنظام التشغيل و دب. أفضل طريقة للتعامل مع هذا، هو استخدام شكل إسو (120) داخليا.


لقد وجدت هذا الحل، أن العمل بالنسبة لي في SSIS هو إزالة الجزء الأخير الذي لدينا في timestamp(6) وتحويله بعد ذلك في timestamp(0) .

select column1,
       CAST(SUBSTRING(CAST(mydate AS CHAR(26)) FROM 1 FOR 19) AS TIMESTAMP(0))
       as mydate 
from MyTable

الاستعلام المعتمد والتحقق من صحة الإدخال هو الطريقة المناسبة. هناك العديد من السيناريوهات التي قد تحدث تحتها حقن SQL ، على الرغم من استخدام mysql_real_escape_string() .

هذه الأمثلة عرضة لحقن SQL:

$offset = isset($_GET['o']) ? $_GET['o'] : 0;
$offset = mysql_real_escape_string($offset);
RunQuery("SELECT userid, username FROM sql_injection_test LIMIT $offset, 10");

أو

$order = isset($_GET['o']) ? $_GET['o'] : 'userid';
$order = mysql_real_escape_string($order);
RunQuery("SELECT userid, username FROM sql_injection_test ORDER BY `$order`");

في كلتا الحالتين ، لا يمكنك استخدام ' لحماية التغليف.

Source : حقن SQL غير متوقع (عند الفرار غير كاف)





sql sql-server ssis teradata