Oracle常用函数详解:ASCII, CHR, CONCAT, INITCAP, INSTR等

5星 · 超过95%的资源 需积分: 9 20 下载量 43 浏览量 更新于2024-07-25 收藏 123KB DOC 举报
"Oracle数据库是企业级关系型数据库管理系统,它包含丰富的函数库,帮助用户进行数据处理和查询。本文档提供了110个常用的Oracle函数介绍,涵盖了字符操作、数值计算、字符串连接等多个方面,旨在帮助数据库管理员和开发人员更好地理解和运用这些功能。" 在Oracle数据库中,函数是用于处理特定数据类型并返回结果的关键工具。以下是一些常见的Oracle函数的详细说明: 1. ASCII函数:`ASCII(char)` - 这个函数返回给定字符的ASCII码,即十进制表示。例如,ASCII码65对应字符'A'。 2. CHR函数:`CHR(num)` - CHR函数接受一个整数作为参数,返回该整数对应的字符。例如,CHR(65)返回字符'A',而CHR(54740)可能返回一个非标准字符,如汉字'赵'。 3. CONCAT函数:`CONCAT(str1, str2, ..., strN)` - CONCAT函数用于将多个字符串连接成一个。例如,`CONCAT('010-', '88888888')` 结果为 '010-88888888'。 4. INITCAP函数:`INITCAP(str)` - 此函数将字符串中的每个单词的首字母转换为大写,其余字母转换为小写。如 `INITCAP('smith')` 返回 'Smith'。 5. INSTR函数:`INSTR(str1, str2, [start], [occurrence])` - 这个函数查找 `str2` 在 `str1` 中的起始位置,`start` 指定开始搜索的位置,默认为1,`occurrence` 指定出现的次数,默认为1。例如,`INSTR('oracletraining', 'ra', 1, 2)` 返回9,因为 'ra' 第二次出现的位置是9。 6. LENGTH函数:`LENGTH(str)` - 该函数返回字符串的长度,包括空格和非可见字符。例如,`LENGTH('高乾竞')` 返回3,`LENGTH('北京市海锭区')` 返回6。 7. LOWER函数:`LOWER(str)` - 将字符串中的所有字符转换为小写。如 `LOWER('AaBbCcDd')` 返回 'aabbccdd'。 8. UPPER函数:`UPPER(str)` - 相反地,`UPPER(str)` 将所有字符转换为大写,例如 `UPPER('AaBbCcDd')` 返回 'ABCDCD'。 除了这些基本的字符串处理函数,Oracle还提供了其他功能强大的函数,如REPLACE用于替换字符串中的特定子串,SUBSTR用于提取字符串的一部分,TRANSLATE用于字符替换,以及REGEXP_LIKE用于正则表达式匹配等。在实际应用中,熟练掌握这些函数可以极大地提高SQL查询的效率和灵活性。对于数据库管理员和开发人员来说,理解并熟练使用这些函数是至关重要的,这将有助于他们编写出更高效、更准确的SQL语句,解决各种复杂的数据处理问题。

SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。

2023-06-02 上传