SAP دوال HANA SQL: أنواعها وأمثلة عليها
⚡ ملخص ذكي
SAP تقوم دوال HANA SQL بتحويل القيم داخل الاستعلام دون نقل البيانات إلى طبقة التطبيق. تشمل سبع فئات تحويل أنواع البيانات، والتاريخ والوقت، والبحث النصي الكامل، والأرقام، والسلاسل النصية، وعمليات النافذة، وعمليات متنوعة أخرى.
SAP وظائف HANA SQL
SAP تقدم HANA ما يلي SAP وظائف هنا-
- وظيفة تحويل نوع البيانات - تستخدم وظيفة تحويل نوع البيانات لتحويل نوع بيانات إلى آخر. فيما يلي قائمة بوظيفة تحويل نوع البيانات، مثل CAST وTO_ALPHANUM وTO_BIGINT وTO_BINARY وما إلى ذلك.
- وظائف التاريخ والوقت – تُستخدم دوال التاريخ والوقت لتحويل التاريخ/الوقت إلى تنسيق مختلف. على سبيل المثال: إضافة أيام، إضافة أشهر، إضافة ثوانٍ، إلخ.
- وظائف النص الكامل – تُستخدم وظائف البحث النصي الكامل للبحث في النصوص. على سبيل المثال: النتيجة، إلخ.
- وظائف الأرقام – تأخذ الدوال العددية قيمة عددية، أو سلسلة نصية تحتوي على أحرف رقمية، كمدخلات، وتعيد قيمًا عددية. على سبيل المثال: ABS، ROUND، POWER، إلخ.
- وظائف السلسلة – تأخذ دوال السلاسل النصية سلسلة نصية كمدخل، وتعالجها، ثم تُرجع قيمة وفقًا للدالة. على سبيل المثال (ASCII، CHAR، CONCAT، إلخ).
- وظائف النافذة – تتيح دوال النافذة للمستخدم تقسيم مجموعة نتائج الاستعلام إلى مجموعات من الصفوف تُسمى أقسام النافذة. على سبيل المثال: RANK()، DENSE_RANK()، ROW_NUMBER()، إلخ.
- وظائف متنوعة- هناك بعض الوظائف الأخرى التي تُستخدم في المهام المتنوعة، على سبيل المثال - 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.

