SAP دوال HANA SQL: أنواعها وأمثلة عليها

⚡ ملخص ذكي

SAP تقوم دوال HANA SQL بتحويل القيم داخل الاستعلام دون نقل البيانات إلى طبقة التطبيق. تشمل سبع فئات تحويل أنواع البيانات، والتاريخ والوقت، والبحث النصي الكامل، والأرقام، والسلاسل النصية، وعمليات النافذة، وعمليات متنوعة أخرى.

  • 🔄 دوال التحويل: تقوم الدوال CAST و TO_BIGINT و TO_ALPHANUM و TO_BINARY بتغيير قيمة من نوع بيانات إلى آخر.
  • 📅 وظائف التاريخ والوقت: تقوم وظائف ADD_DAYS و ADD_MONTHS و ADD_SECONDS بتغيير أو إعادة تنسيق قيم التاريخ والوقت.
  • 🔍 وظائف البحث النصي الكامل: تقوم وظيفة SCORE والوظائف ذات الصلة بترتيب النتائج التي يتم إرجاعها من خلال البحث النصي.
  • 🔢 الدوال العددية: تقبل الدوال ABS و ROUND و POWER المدخلات الرقمية وتعيد نتيجة رقمية.
  • 🔤 دوال السلاسل النصية: تقوم الدوال ASCII و CHAR و CONCAT بمعالجة مدخلات الأحرف وإرجاع قيمة مشتقة.
  • 🪟 وظائف النافذة: تقوم الدوال RANK و DENSE_RANK و ROW_NUMBER بتقسيم مجموعة النتائج إلى أقسام نافذة.
  • 🧰 منوعات: تتولى CONVERT_CURRENCY و CURRENT_SCHEMA المهام خارج المجموعات الست الأخرى.

SAP وظائف HANA SQL

SAP وظائف HANA SQL

SAP تقدم HANA ما يلي SAP وظائف هنا-

  1. وظيفة تحويل نوع البيانات - تستخدم وظيفة تحويل نوع البيانات لتحويل نوع بيانات إلى آخر. فيما يلي قائمة بوظيفة تحويل نوع البيانات، مثل CAST وTO_ALPHANUM وTO_BIGINT وTO_BINARY وما إلى ذلك.
  2. وظائف التاريخ والوقت – تُستخدم دوال التاريخ والوقت لتحويل التاريخ/الوقت إلى تنسيق مختلف. على سبيل المثال: إضافة أيام، إضافة أشهر، إضافة ثوانٍ، إلخ.
  3. وظائف النص الكامل – تُستخدم وظائف البحث النصي الكامل للبحث في النصوص. على سبيل المثال: النتيجة، إلخ.
  4. وظائف الأرقام – تأخذ الدوال العددية قيمة عددية، أو سلسلة نصية تحتوي على أحرف رقمية، كمدخلات، وتعيد قيمًا عددية. على سبيل المثال: ABS، ROUND، POWER، إلخ.
  5. وظائف السلسلة – تأخذ دوال السلاسل النصية سلسلة نصية كمدخل، وتعالجها، ثم تُرجع قيمة وفقًا للدالة. على سبيل المثال (ASCII، CHAR، CONCAT، إلخ).
  6. وظائف النافذة – تتيح دوال النافذة للمستخدم تقسيم مجموعة نتائج الاستعلام إلى مجموعات من الصفوف تُسمى أقسام النافذة. على سبيل المثال: RANK()، DENSE_RANK()، ROW_NUMBER()، إلخ.
  7. وظائف متنوعة- هناك بعض الوظائف الأخرى التي تُستخدم في المهام المتنوعة، على سبيل المثال - CONVERT_CURRENCY وCURRENT_SCHEMA وما إلى ذلك.

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

الدوال العددية والتجميعية ودوال النافذة

قبل الأمثلة، هناك تمييز واحد يحدد كيفية عمل الدالة في الاستعلام: عدد الصفوف التي تدخل، وعدد الصفوف التي تخرج.

الفئة صفوف للداخل : صفوف للخارج هل تحتاج إلى استخدام GROUP BY؟ أمثلة
العددية صف واحد إلى صف واحد لا علوي، مستدير، حتى الآن، مصبوب
مجموع صفوف متعددة إلى صف واحد نعم، إلا إذا كانت المجموعة بأكملها مجموعة واحدة مجموع، AVG، العدد، الحد الأدنى، الحد الأقصى
نافذة صفوف عديدة إلى صفوف عديدة لا، بل يستخدم كلمة OVER بدلاً من ذلك. الرتبة، كثافة الرتبة، رقم الصف، التأخير
طاولات يُرجع مجموعة نتائج يُستخدم في جملة FROM SERIES_GENERATE_DATE

النتيجة العملية هي أن التجميع يُخفي التفاصيل بينما تحافظ دالة النافذة عليها. يتطلب طلب متوسط ​​كل موظف إلى جانب متوسط ​​قسمه استخدام دالة نافذة، لأن عبارة GROUP BY ستحذف الصفوف الفردية بالكامل.

مشترك SAP وظائف HANA مع أمثلة

يمكن لصق العبارات أدناه مباشرةً في وحدة تحكم SQL. كل عبارة توضح فئة واحدة من القائمة أعلاه.

1) دوال السلاسل النصية. تأخذ هذه الدوال مدخلات نصية وتعيد قيمة مشتقة.

SELECT
  UPPER('sap hana')               AS UPPER_TEXT,
  LENGTH('SAP HANA')              AS TEXT_LENGTH,
  CONCAT('SAP ', 'HANA')         AS JOINED,
  SUBSTRING('SAP HANA', 5, 4)   AS PART,
  REPLACE('SAP HANA', 'HANA', 'S/4') AS SWAPPED,
  TRIM('  padded  ')             AS CLEANED
FROM DUMMY;

2) الدوال العددية. يستحق سلوك التقريب الاختبار، لأن ROUND يستخدم التقريب التجاري بينما FLOOR و CEIL يتحركان دائمًا في اتجاه واحد.

SELECT
  ABS(-45.7)          AS ABSOLUTE_VALUE,
  ROUND(123.4567, 2) AS ROUNDED,
  FLOOR(9.9)          AS ROUNDED_DOWN,
  CEIL(9.1)           AS ROUNDED_UP,
  POWER(2, 10)       AS RAISED,
  MOD(17, 5)         AS REMAINDER
FROM DUMMY;

3) وظائف التاريخ والوقت. هذه هي العناصر الأكثر استخداماً لإعداد التقارير الدورية.

SELECT
  CURRENT_DATE                              AS TODAY,
  ADD_DAYS(CURRENT_DATE, 30)                AS IN_30_DAYS,
  ADD_MONTHS(CURRENT_DATE, -1)              AS LAST_MONTH,
  DAYS_BETWEEN('2026-01-01', CURRENT_DATE) AS ELAPSED,
  LAST_DAY(CURRENT_DATE)                    AS MONTH_END,
  WEEKDAY(CURRENT_DATE)                     AS DAY_INDEX
FROM DUMMY;

4) دوال التحويل. يمنع التحويل الصريح عملية الإكراه الصامتة للأنواع التي تبطئ جملة WHERE.

SELECT
  CAST('1234' AS INTEGER)               AS AS_NUMBER,
  TO_VARCHAR(CURRENT_DATE, 'DD.MM.YYYY') AS AS_TEXT,
  TO_DECIMAL(1234.5678, 10, 2)         AS AS_DECIMAL
FROM DUMMY;

يتم تغطية سلوك النوع وحدود كل نوع مستهدف في SAP أنواع بيانات HANA.

شرح وظائف النوافذ

تُجري دالة النافذة عملية حسابية على مجموعة من الصفوف المرتبطة بالصف الحالي، دون دمجها. تُحدد عبارة OVER هذه المجموعة، ولها جزآن اختياريان: PARTITION BY الذي يقسم البيانات إلى مجموعات، وORDER BY الذي يُثبت الترتيب داخل كل مجموعة.

SELECT
  DEPARTMENT,
  EMP_NAME,
  SALARY,
  ROW_NUMBER() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS ROW_NUM,
  RANK()       OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS RANKING,
  DENSE_RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS DENSE_RANKING,
  SUM(SALARY)  OVER (PARTITION BY DEPARTMENT) AS DEPT_TOTAL
FROM DHK_SCHEMA.EMPLOYEE;

تختلف دوال الترتيب الثلاث فقط عندما تتساوى القيم:

  • رقم الصف لا يوجد تعادل. حتى الراتبان المتطابقان يحصلان على الرقمين 1 و2، ويتم اختيارهما بشكل عشوائي.
  • RANK يُعطي الصفوف المتساوية نفس الرقم ثم يتخطى صفًا. صفان عند الرقم 1 يتبعهما الرقم 3.
  • DENSE_RANK يُعطي الصفوف المتساوية نفس الرقم ولا يتخطى أي صف. صفان يحملان الرقم 1 يتبعهما صف يحمل الرقم 2.

استخدم ROW_NUMBER لإزالة التكرارات، وRANK لترتيب العناصر وفقًا لأسلوب المنافسة، وDENSE_RANK عندما يجب أن يبقى التسلسل متصلًا. تُغطى رموز المقارنة والمنطق المستخدمة مع هذه الدوال في SAP مشغلي HANA، وبنية البيان في SAP هانا SQL.

الأسئلة الشائعة

DUMMY هو جدول نظام يحتوي على صف واحد فقط. يسمح بتقييم تعبير أو دالة في عبارة SELECT دون الرجوع إلى أي جدول حقيقي.

كلا الدالتين تُعطيان الصفوف المتساوية نفس الرقم. ثم تتخطى دالة RANK القيم التالية، لذا فإن أول قيمتين تتبعهما قيمة ثالثة. أما دالة DENSE_RANK فلا تتخطى أي قيم، لذا فإن أول قيمتين تتبعهما قيمة ثانية.

نعم. إن وصف التحويل بلغة بسيطة يُعيد الدالة والصيغة المطابقة، وهو أسرع من مسح قائمة مرجعية تضم عدة مئات من المدخلات.

غالباً. إنّ وجود دالة مُغلّفة بعمود مُصفّى يمنع التصفية الفعّالة، ويمكن للذكاء الاصطناعي إعادة هيكلة الشرط بحيث يبقى العمود دون تغيير. تأكد من ذلك مع خطة التنفيذ.

نعم، لكن تطبيق ذلك على العمود يُجبر على إجراء التقييم على كل صف. لذا، يُفضّل تحويل الثابت بدلاً من ذلك كلما أمكن، حتى يظل بالإمكان تصفية العمود بكفاءة.

تلخيص هذه التدوينة بـ: