• [问题求助] oracle的 JSON(STRICT)在gaussdb集中式中如何实现等价转换
    oracle的"CONSTRAINT "CK_AZ_ITF_DATA_PARTITION" CHECK (ITF_DATA IS JSON(STRICT)) ENABLE"在gaussdb集中式中如何实现同等转换, json(strict) 这个在gaussdb中不支持,在gaussdb是用函数替代吗。类似如下:1. 创建一个检查 JSON 格式的函数: CREATE OR REPLACE FUNCTION is_json(p_data TEXT) RETURNS BOOLEAN AS $$ BEGIN     -- 尝试将输入的数据解析为 JSON     EXECUTE 'SELECT CAST(' || quote_literal(p_data) || ' AS JSON);';     RETURN TRUE; EXCEPTION WHEN others THEN     RETURN FALSE; END; $$ LANGUAGE plpgsql; 2. 使用该函数创建 CHECK 约束: ALTER TABLE your_table_name ADD CONSTRAINT CK_AZ_ITF_DATA_PARTITION CHECK (is_json(ITF_DATA)); 问题:我这个函数和oracle那个json(strict)是完全等价的吗,如果不符合要求,应该怎样解决呢
  • [专题汇总] 9月份干货合集又来了,快看看有没有你想要的
     大家好,9月份合集又来了,本次主要带来的是python,redis,mysql,oralce等相关技术分享,希望可以帮到大家 1.Python语言中的重要函数对象用法小结【转】 https://bbs.huaweicloud.com/forum/thread-0292163074507230065-1-1.html  2.PyTorch中torch.no_grad()用法举例详解【转】 https://bbs.huaweicloud.com/forum/thread-02127163074675610068-1-1.html  3.解决遇到:PytorchStreamReader failed reading zip archive:failed finding central错误问题【转】 https://bbs.huaweicloud.com/forum/thread-0290163076531320030-1-1.html  4.解决遇到PermissionError:[Errno 13] Permission denied:XXXX错误的问题【转】 https://bbs.huaweicloud.com/forum/thread-0204163087169319057-1-1.html  5.使用python复制PDF中的页面的操作代码【转】 https://bbs.huaweicloud.com/forum/thread-0204163087217277058-1-1.html  6.Python中的Popen函数demo演示【转】 https://bbs.huaweicloud.com/forum/thread-0287163087322224052-1-1.html  7.Redis内存碎片率调优处理方式【转】 https://bbs.huaweicloud.com/forum/thread-02127163089843529071-1-1.html  8.oracle关联查询报invalid number错误的解决方法【转】 https://bbs.huaweicloud.com/forum/thread-0290163089973043031-1-1.html  9.sql中的regexp与like区别实现【转】 https://bbs.huaweicloud.com/forum/thread-02127163091329965072-1-1.html  10.SQL多表联查的几种方法示例总结【转】 https://bbs.huaweicloud.com/forum/thread-0234163091395788038-1-1.html  11.redis中如何做到内存优化【转】 https://bbs.huaweicloud.com/forum/thread-02127163091498087074-1-1.html  12.mysql数据库实现超键、候选键、主键与外键的使用【转】 https://bbs.huaweicloud.com/forum/thread-0290163091552614032-1-1.html  13.达梦数据库如何设置自增主键的方法及注意事项【转】 https://bbs.huaweicloud.com/forum/thread-0234163091642509039-1-1.html  14.解决生产环境遇到的curl和yum命令报错问题【转】 https://bbs.huaweicloud.com/forum/thread-0234163091687787040-1-1.html  15.Nginx实现404页面的配置方法的两种方法【转】 https://bbs.huaweicloud.com/forum/thread-0290163091762002033-1-1.html 
  • [技术干货] oracle关联查询报invalid number错误的解决方法【转】
    出现问题的原因和背景oracle进行关联查询的时候因为字段存在多个用逗号切割的id,导致查询的过程中报无效数字或非法数字问题复现1新建表A123456789CREATE TABLE  "A" (  id NUMBER NOT NULL,  name VARCHAR2(255 BYTE))  INSERT INTO "A" VALUES ('1', '上海');INSERT INTO "A" VALUES ('2', '北京');INSERT INTO "A" VALUES ('3', '广州');INSERT INTO "A" VALUES ('4', '深圳');新建表B12345678CREATE TABLE  "B" (  id NUMBER NOT NULL,  aid VARCHAR2(255 BYTE))  INSERT INTO "B" VALUES ('1', '1,2,3');INSERT INTO "B" VALUES ('2', '1,2');INSERT INTO "B" VALUES ('3', '1,2,3,4');问题复现21select * from A where id in (select aid from B where id = 3)产生的原因:因为查询过程中,多个id放在了一个字段,这个字段不止有数字也有逗号,id是数字类型,所以数据库识别以后直接会报非法数字。解决方法先将子查询转成多行12345678910    WITH    split_string AS (                SELECT   (select aid from B  where id = 3)AS string FROM dual    )SELECT    REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aidFROM    split_stringCONNECT BY    REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL;再次查询A表数据12345678910select * from A  where id  in (    WITH    split_string AS (                SELECT   (select aid from B  where id = 3)AS string FROM dual    )SELECT    REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aidFROM    split_stringCONNECT BY    REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL)
  • [技术干货] Oracle判断是否需要重建索引的详细步骤【转】
    判断是否需要重建索引是数据库维护中的一个关键步骤。为了确定是否需要重建索引,可以考虑以下几个因素:索引碎片化程度:通过分析索引的碎片化程度来确定是否需要重建。索引的B-Tree层级(blevel):B-Tree索引的层级越高,查询性能可能越差。叶块数量(leaf_blocks):叶块数量的显著增加可能表明索引需要重建。聚簇因子(clustering_factor):聚簇因子越接近表的行数,索引性能越好。数据库性能监控:通过监控数据库性能指标,如查询响应时间,来判断是否需要重建索引。详细步骤和代码示例以下是详细的步骤和代码示例,指导你如何判断是否需要重建索引。1. 检查索引碎片化程度使用DBA_INDEXES和DBA_IND_STATISTICS视图,检查索引的碎片化程度。123SELECT index_name, blevel, leaf_blocks, clustering_factorFROM dba_indexesWHERE owner = 'MY_SCHEMA' AND table_name = 'MY_TABLE';2. 分析索引统计信息使用DBMS_STATS包收集索引统计信息。1EXEC DBMS_STATS.GATHER_INDEX_STATS('MY_SCHEMA', 'IDX_MY_TABLE_MY_COLUMN');3. 计算索引碎片化程度通过计算索引的碎片化程度来判断是否需要重建索引。以下是一个示例查询,用于计算索引的碎片化程度。SELECT     index_name,     blevel,     leaf_blocks,     clustering_factor,     (leaf_blocks - DISTINCT_LEAF_BLOCKS) / leaf_blocks * 100 AS fragmentation_percent FROM (     SELECT         i.index_name,         i.blevel,         i.leaf_blocks,         i.clustering_factor,         (SELECT COUNT(DISTINCT block_id) FROM dba_extents e WHERE e.segment_name = i.index_name AND e.owner = i.owner) AS DISTINCT_LEAF_BLOCKS     FROM dba_indexes i     WHERE i.owner = 'MY_SCHEMA' AND i.table_name = 'MY_TABLE' ); 在上述查询中,fragmentation_percent表示索引的碎片化程度。如果该值较高(例如超过20%),则可能需要重建索引。4. 检查B-Tree层级(blevel)B-Tree索引的层级(blevel)越高,查询性能可能越差。一般来说,B-Tree层级小于4是理想的。123SELECT index_name, blevelFROM dba_indexesWHERE owner = 'MY_SCHEMA' AND table_name = 'MY_TABLE';如果blevel大于3,则可能需要重建索引。5. 检查叶块数量(leaf_blocks)叶块数量的显著增加可能表明索引需要重建。123SELECT index_name, leaf_blocksFROM dba_indexesWHERE owner = 'MY_SCHEMA' AND table_name = 'MY_TABLE';如果叶块数量显著增加,则可能需要重建索引。6. 检查聚簇因子(clustering_factor)聚簇因子越接近表的行数,索引性能越好。聚簇因子过高可能表明索引需要重建。123SELECT table_name, num_rowsFROM dba_tablesWHERE owner = 'MY_SCHEMA' AND table_name = 'MY_TABLE';123SELECT index_name, clustering_factorFROM dba_indexesWHERE owner = 'MY_SCHEMA' AND table_name = 'MY_TABLE';如果聚簇因子显著高于表的行数,则可能需要重建索引。7. 数据库性能监控通过监控数据库性能指标,如查询响应时间,来判断是否需要重建索引。可以使用Oracle自带的性能监控工具(如AWR报告)来分析数据库性能。
  • [技术干货] Oracle修改默认的时间格式的四种方式【转】
    前言默认的日期和时间格式由参数NLS_DATE_FORMAT控制如果需要修改默认的时间格式,可以通过修改会话级别或系统级别的参数来实现1. 会话级别在当前会话中设置日期格式,这只会影响当前会话,而不会影响其他用户的会话1ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';验证会话级别的设置1SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;2. 系统级别更改初始化参数文件(spfile或pfile)来永久修改系统级别的默认日期格式使用spfile(服务器参数文件):ALTER SYSTEM SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' SCOPE=SPFILE;使用pfile(文本参数文件):NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'重启数据库生效:12SHUTDOWN IMMEDIATE;STARTUP;3. 环境配置客户端机器上设置环境变量,例如:Windows: 在环境变量中添加NLS_DATE_FORMATLinux/Unix: 在.bash_profile或.profile中添加:export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'4. 函数格式化在查询中使用TO_CHAR函数1SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM DUAL;
  • [技术干货] Oracle数据库中lead和lag函数用法示例【转】
    Oracle数据库中的LEAD和LAG函数是窗口函数,它们允许你在查询中访问当前行的下一行(LEAD)或上一行(LAG)的值。这些函数在处理时间序列数据、比较相邻行数据、计算差异等场景中非常有用。LAG函数的基本语法如下:1234LAG(value_expression [, offset] [, default]) OVER (    [PARTITION BY partition_expression]    ORDER BY sort_expression [ASC | DESC])value_expression:你想要获取前一行值的列。offset:可选参数,指定从当前行向上移动的行数,默认值为1。default:可选参数,当没有足够的行时返回的默认值。如果省略,且没有行可返回时,结果为NULL。PARTITION BY:可选子句,用于指定分区,类似于GROUP BY。ORDER BY:必需子句,用于指定窗口函数计算的排序顺序。以下是一个使用LAG函数的示例:假设你有一个名为sales的表,其中包含salesperson(销售人员)、sale_date(销售日期)和amount(销售金额)三个字段。你想要获取每个销售人员在前一天的销售金额。123456SELECT    salesperson,    sale_date,    amount,    LAG(amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS prev_amountFROM sales;在这个查询中,LAG(amount)函数会为每个销售人员获取他们在前一天的销售金额。如果某个销售人员在某一天之前没有销售记录,prev_amount将为NULL。请注意,LAG函数通常与ORDER BY子句一起使用,以确保结果集的顺序是有意义的。此外,LAG函数在处理分区数据时也非常有用,例如在处理按周或按月分组的数据时。Oracle数据库中的**LEAD函数**是一个窗口函数,它允许你访问当前行的下一行(或指定偏移量的行)的值。这个函数在处理时间序列数据、预测未来值、比较相邻行数据等场景中非常有用。LEAD函数的基本语法如下:1234LEAD(value_expression [, offset] [, default]) OVER (    [PARTITION BY partition_expression]    ORDER BY sort_expression [ASC | DESC])value_expression:你想要获取未来行值的列。offset:可选参数,指定从当前行向下移动的行数。默认值为1,表示获取下一行的值。default:可选参数,当没有足够的行时返回的默认值。如果省略,且没有行可返回时,结果为NULL。PARTITION BY:可选子句,用于指定分区,类似于GROUP BY。ORDER BY:必需子句,用于指定窗口函数计算的排序顺序。以下是一个使用LEAD函数的示例:假设你有一个名为sales的表,其中包含salesperson(销售人员)、sale_date(销售日期)和amount(销售金额)三个字段。你想要获取每个销售人员在后一天的销售金额。123456SELECT    salesperson,    sale_date,    amount,    LEAD(amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS next_day_amountFROM sales;在这个查询中,LEAD(amount)函数会为每个销售人员获取他们在后一天的销售金额。如果某个销售人员在某一天之后没有更多的销售记录,next_day_amount将为NULL。请注意,LEAD函数通常与ORDER BY子句一起使用,以确保结果集的顺序是有意义的。此外,LEAD函数在处理分区数据时也非常有用,例如在处理按周或按月分组的数据时。和LAG函数的区别以及转换LAG函数的格式和LEAD一样,而且是容易和LEAD混淆的。不过看看它们翻译过来的意思,应该就能大概了解:LEAD :前导,向前; LAG:落后 。它们就是对反义词。
  • [技术干货] oracle数据库中listagg函数使用详解【转】
    listagg是oracle11.2增加的特性。功能类似wmsys.wm_concat函数,即将数据分组后,把指定列的数据通过指定符号合并。--listagg()函数,列转行。 在每个分组内,LISTAGG根据order by子句对列值进行排序,将排序后的结果拼接起来。--基本语法;listagg(待处理列,连接符号) within group(order by 用于拼接组内排序字段)1select a.* from test_userinfo a;--分组函数:1select a.user_sex,listagg(a.user_school,',') within group(order by a.user_age) from test_userinfo a group by a.user_sex;--分析函数:根据年龄分区,在分区内部拼接学校,然后拼接时按照性别排序1select a.user_name,a.user_age,a.user_school,listagg(a.user_school,',') within group(order by a.user_sex) over (partition by a.user_age) from test_userinfo a;附:LISTAGG () 和STRING_AGG () 函数的区别与简单使用1:区别LISTAGG 和 STRING_AGG 都是用于在 SQL 查询中将多个值合并为单个字符串的函数,但它们属于不同的数据库系统。LISTAGG 是 Oracle 数据库中的聚合函数,用于将多行的值合并为一个字符串,并且可以指定分隔符。STRING_AGG 是 SQL Server 中的聚合函数,也用于将多行的值合并为一个字符串,并且可以指定分隔符。2:语法结构2.1 LISTAGG 函数的语法结构如下:12LISTAGG(expression, delimiter) WITHIN GROUP(ORDER BY order_expression) [OVER (analytic_clause)]expression:要合并的表达式,通常是一个列或计算值。delimiter:用于分隔合并的值的分隔符。ORDER BY order_expression:可选部分,用于指定合并的顺序。如果不提供 ORDER BY 子句,合并的顺序将不受控制。analytic_clause:可选部分,通常用于窗口函数。在常规用法中,这部分通常不会出现。2.2 STRING_AGG 函数的语法结构如下: 1STRING_AGG (expression, separator)expression:要合并的表达式,通常是一个列或计算值。separator:用于分隔合并的值的分隔符。
  • [技术干货] Oracle VM VirtualBox Ubuntu设置共享文件夹方式【转】
    一、原因为什么需要共享文件夹在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。共享文件夹的前提Oracle VM VirtualBox如果要安装共享文件夹,则需要先安装增强系统。打开虚拟机 在左上角的菜单栏点击设备->安装增强功能。具体步骤本文不多做赘述。二、操作步骤在windows系统中创建文件夹创建的这个文件夹最好选择在内存空间较大的磁盘中。否则会引起内存不足的困扰。在E盘中创建名为winshare的文件夹。设置共享文件夹打开Oracle VM VirtualBox,点击设置。点击“共享文件夹”。随后在共享文件夹路径中选择第一步创建得文件夹。选择后共享文件夹名称自动更改为文件夹名称。共享文件夹名称可改可不改。在复选框中将自动挂载勾选上。点击OK。启动虚拟机,打开终端,运行以下命令。创建文件夹1sudo mkdir /mnt/share将共享文件夹挂载到创建得文件夹中1sudo mount -t vboxsf winshare /mnt/share其中winshare为在添加共享文件夹时的共享文件夹名称。在windows的winshare文件中放入文件,在虚拟机命令行输入1ls /mnt/share可以看到自己刚刚在 winshare文件中放的文件。成功!
  • [技术干货] Oracle RCA 脑裂
    前言在Oracle数据库的高可用性解决方案中,Oracle Real Application Clusters (RAC) 是一个重要的组成部分,它允许多个数据库实例在共享存储上并发运行,提供故障转移和负载均衡的能力。然而,就像任何复杂的系统一样,RAC也面临一些挑战,其中之一就是所谓的“脑裂”(Split-Brain)问题。什么是Oracle RAC脑裂?Oracle RAC脑裂是指在一个RAC集群中,由于网络分区或通信故障,导致集群中的节点无法正确通信,从而误认为自己是集群中唯一活动的节点。这种情况下,每个“孤立”的节点都可能会继续提供服务,导致数据不一致和其他潜在问题。脑裂的原因RAC脑裂可能由以下原因引起:网络故障:网络分区或中断可能导致节点之间的通信失效。配置错误:错误的集群配置或网络设置可能导致节点之间的通信问题。硬件故障:如交换机、路由器或NIC卡等硬件故障也可能导致节点之间的通信中断。软件错误:软件bug或错误也可能导致节点之间的通信问题。脑裂的影响RAC脑裂可能导致以下影响:数据不一致:如果两个或多个节点都继续提供服务,它们可能会写入相同的数据块,导致数据不一致。服务中断:节点之间的通信问题可能导致应用程序无法连接到数据库,从而导致服务中断。管理复杂性:解决脑裂问题可能需要管理员手动干预,增加了管理的复杂性。如何预防和解决脑裂以下是一些预防和解决RAC脑裂的建议:网络冗余:确保网络具有足够的冗余,以便在发生故障时能够自动切换到备用路径。配置检查:定期检查集群的配置和网络设置,确保它们正确无误。监控和警报:使用Oracle Enterprise Manager或其他监控工具来监控集群的健康状况,并设置警报以便在出现问题时及时通知管理员。测试恢复计划:定期测试RAC的恢复计划,确保在发生问题时能够迅速恢复服务。手动干预:在发生脑裂时,管理员可能需要手动干预来解决问题。这可能包括重新启动节点、修复网络故障或重新配置集群。使用最新的补丁和更新:确保你的Oracle RAC集群和所有相关组件都使用最新的补丁和更新,以减少软件错误的风险。总之,Oracle RAC脑裂是一个需要认真对待的问题。通过采取适当的预防措施和制定有效的恢复计划,你可以减少脑裂的风险并确保你的RAC集群能够持续提供高可用性和高性能的服务。
  • [问题求助] 通过裸金属服务部署Oracle RAC专题材料
    ”通过裸金属服务部署Oracle RAC“专题里面的材料哪位大神有?URL:https://bbs.huaweicloud.com/topic/detail_100042 目前这个链接打不开了,这个谁知道迁移到那个URL下面了?
  • [技术干货] oracle 操作时间的函数总结
    下面是一些使用 Oracle 数据库中处理时间的函数的 SQL 查询示例:SYSDATE - 获取当前日期和时间:SELECT SYSDATE FROM dual;CURRENT_DATE - 获取当前日期:SELECT CURRENT_DATE FROM dual;SYSTIMESTAMP - 获取当前日期和时间及时区信息:SELECT SYSTIMESTAMP FROM dual;CURRENT_TIMESTAMP - 获取当前日期和时间及时区信息:SELECT CURRENT_TIMESTAMP FROM dual;可以看出SYSDATE 和 CURRENT_DATE 输出的值都是一样的SYSTIMESTAMP 和 CURRENT_TIMESTAMP 输出的值都是一样的SYSTIMESTAMP 比起 SYSDATE 会额外输出毫秒值和时区,其他一样CURRENT_TIMESTAMP 比起 CURRENT_DATE 会额外输出毫秒值和时区,其他一样SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUALEXTRACT - 提取日期/时间的一部分:例如通过EXTRACT 函数提取年、月、日SELECT SYSDATE, EXTRACT(YEAR FROM SYSDATE), EXTRACT(MONTH FROM SYSDATE), EXTRACT(DAY FROM SYSDATE) FROM DUAL例如通过EXTRACT 函数提取时、分、秒注意:获取时分秒,不能用SYSDATE,只能用SYSTIMESTAMP获取时分秒,不能用CURRENT_DATE,只能用CURRENT_TIMESTAMPSELECT SYSTIMESTAMP, EXTRACT(HOUR FROM SYSTIMESTAMP), EXTRACT(minute from SYSTIMESTAMP), EXTRACT(second from SYSTIMESTAMP) FROM DUALADD_MONTHS - 向日期添加指定月数:SELECT ADD_MONTHS(SYSDATE, 3) AS ThreeMonthsLater FROM dual;MONTHS_BETWEEN - 计算两个日期之间的月数差:注意:这里只有 MONTHS_BETWEEN 有效。YEARS_BETWEEN 和 DAYS_BETWEEN 这两个都是无效函数SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2023-01-01', 'YYYY-MM-DD')) AS MonthsDifference FROM dual;NEXT_DAY - 获取下一个指定星期几的日期:SELECT SYSDATE, NEXT_DAY(SYSDATE, 1) AS n1, NEXT_DAY(SYSDATE, 2) AS n2, NEXT_DAY(SYSDATE, 3) AS n3, NEXT_DAY(SYSDATE, 4) AS n4, NEXT_DAY(SYSDATE, 5) AS n5, NEXT_DAY(SYSDATE, 6) AS n6, NEXT_DAY(SYSDATE, 7) AS n7 FROM DUALLAST_DAY - 获取月份的最后一天:SELECT LAST_DAY(SYSDATE) AS LastDayOfMonth FROM dual;ROUND - 对日期进行四舍五入:SELECT SYSDATE, ROUND(SYSDATE, 'MONTH'), ROUND(TO_DATE('2024-04-10 20:12:30', 'YYYY-MM-DD HH24:MI:SS'), 'MONTH') FROM DUAL;TRUNC - 截断日期到指定精度:SELECT TRUNC(SYSDATE, 'YY'), TRUNC(SYSDATE, 'MM'), TRUNC(SYSDATE, 'HH'), TRUNC(SYSDATE, 'mi') FROM DUAL;注意:TRUNC 可以截取到 年、月、日、时、分,但是没有秒TO_CHAR - 将日期/时间转换为字符串:SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS FormattedDate FROM DUAL;TO_DATE - 将字符串转换为日期:SELECT TO_DATE('2024-04-20', 'YYYY-MM-DD') AS DateFromString FROM DUAL;TO_TIMESTAMP - 将字符串转换为时间戳:SELECT TO_TIMESTAMP('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS TimestampFromString FROM DUAL;TO_DATE 和 TO_TIMESTAMP 效果是一样的SELECT TO_DATE('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS DateFmt, TO_TIMESTAMP('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS TimestampFmt FROM DUAL;NEW_TIME - 将一个时区的时间转换为另一个时区的时间:SELECT NEW_TIME(SYSDATE, 'AST', 'PST') AS ConvertedTime FROM DUAL;所有的时区如下
  • [技术干货] Oracle数据库中字符串截取最全方法总结【转】
    语法:SUBSTR(string,start, [length])string:表示源字符串,即要截取的字符串。start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起**。**length:可选项,表示截取字符串长度。示例:SELECT SUBSTR('Hello SQL!', 1) FROM dual --截取所有字符串,返回'Hello SQL!' SELECT SUBSTR('Hello SQL!', 2) FROM dual --从第2个字符开始,截取到末尾。返回'ello SQL!' SELECT SUBSTR('Hello SQL!', -4) FROM dual --从倒数第4个字符开始,截取到末尾。返回'SQL!' SELECT SUBSTR('Hello SQL!', 3, 6) FROM dual --从第3个字符开始,截取6个字符。返回'llo SQ' SELECT SUBSTR('Hello SQL!', -4, 3) FROM dual --从倒数第4个字符开始,截取3个字符。返回'SQL'语法:INSTR(string,child_string,[start],[show_time])string:表示源字符串。child_string:子字符串,即要查找的字符串。start:可选项,开始位置,默认从1开始。如果为负数,则从右向左检索。show_time:可选项,表示子字符串第几次出现在源字符串当中,默认第1次,负数则报错。示例:--表示从源字符串'city_company_staff'中第1个字符开始查找子字符串'_'第1次出现的位置 SELECT INSTR('city_company_staff', '_') FROM dual --返回5 --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置 SELECT INSTR('city_company_staff', '_', 5) FROM dual --返回5 --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置 SELECT INSTR('city_company_staff', '_', 5, 1) FROM dual --返回5 --表示从源字符串'city_company_staff'中第3个字符开始查找子字符串'_'第2次出现的位置 SELECT INSTR('city_company_staff', '_', 3, 2) FROM dual --返回13 --start参数为-1,从右向左检索,查找'_'字符串在源字符串中第1次出现的位置 SELECT INSTR('city_company_staff', '_', -1, 1) FROM dual --返回13 --start参数为-6,从右向左检索,查找'_'字符串在源字符串中第2次出现的位置 SELECT INSTR('city_company_staff', '_', -6, 2) FROM dual --返回5现有需求:数据查询处理需要对code进行"拆分"code命名规则类似:城市_所属公司_员工职位_员工姓名其中,城市、公司、职位、姓民字符串长度不固定,由于字符串长度不固定,只使用substr函数无法实现需求,需配合instr函数定位到字符’_'的位置,然后使用substr函数进行截取。详细见下面例子。表数据如下:SOURCE_CODEBJ_BAIDU_CEO_LYSH_BOKE_MANAGER_LWXHRB_WM_CASHIER_OYZY获取城市:SELECT SUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITY FROM TABLE_CODE_TEST结果:解释:此处截取源字符串SOURCE_CODE,从第1个字符开始,由于代表城市的code长度不固定,我们无法确定截取几个字符,所以使用instr函数判断第一个’_'字符的位置,进而确定每个SOURCE_CODE截取几个字符串。那为什么减1呢?是因为**INSTR (SOURCE_CODE, ‘_’, 1, 1)**获取的是源字符串中’_'字符第一次出现的位置,再减1就得出了CITY字符个数。获取公司:SELECT SUBSTR ( SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 1) + 1, INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1 ) AS COMPANY FROM TABLE_CODE_TEST结果:解释:截取源字符串,从(第一个’_'出现位置+1)开始,截取个数为:第2个’_‘出现位置减去第1个’_‘出现位置,此时还多了一个下划线’_',再减去1即可得到代表公司字符串。获取姓名:SELECT SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME FROM TABLE_CODE_TEST结果:解释:截取源字符串,从('_'第3次出现位置+1)开始截取,截取到末尾。Oracle 字符串截取 从后向前截取方法从“起始位置”开始,取“多少"个select 'ZA01X-00000' as item_code ,instr('ZA01X-00000','-00000',-1,1) as position ,substr('ZA01X-00000',instr('ZA01X-00000','-00000',-1,1),length('ZA01X-00000')) as result from dual ; -- ITEM_CODE POSITION RESULT ZA01X-00000 6 -00000 -- select substr('ZA01X-00000',-6) as result from dual ; -- RESULT -00000 -- -- 实现 在ITEM CODE 中截取 ‘-00000' 字符串
  • [问题求助] 关于oracle中json字段的问题。
    求助,oracle12C 怎么往json字段里面添加新的key value,怎么更新原key value。最好可以帮忙写个函数
  • [问题求助] GaussDB支持自定义聚合函数吗?
    各位大神,请问GaussDB支持自定义聚合函数吗?例如wm_concat。让开发中可以自己定义聚合函数,以完成如sum这些聚合函数的功能。
  • [专题汇总] 11月技术干货一篇写尽合集20篇
    技术干货一篇写尽合集20篇,本次给大家带来了CodeArts板块技术干货合集,设计Mysql Oracle Git 容器 运维的相关知识,希望可以给大家带来帮助  1.Oracle表索引查看常见的方法总结【转】 https://bbs.huaweicloud.com/forum/thread-0297136732000017003-1-1.html  2.Oracle数据表保留一条重复数据简单方法【转】 https://bbs.huaweicloud.com/forum/thread-0205136731850117002-1-1.html  3.Oracle导入导出dmp文件具体示例【转】 https://bbs.huaweicloud.com/forum/thread-0205136731270640001-1-1.html  4.看看CodeArts snap如何解释毕昇JDK如何进行快速反序列化 https://bbs.huaweicloud.com/forum/thread-0266136724985168025-1-1.html  5.从0到1学会MySQL单表查询【转】 https://bbs.huaweicloud.com/forum/thread-02105136720816984026-1-1.html  6.MySQL日期格式以及日期函数举例详解【转】 https://bbs.huaweicloud.com/forum/thread-0266136720702857023-1-1.html  7.MySQL主从同步延迟原因与解决方案【转】 https://bbs.huaweicloud.com/forum/thread-0257136720588871021-1-1.html  8.Docker安装mysql配置大小写不敏感挂载数据卷存储操作步骤【转】 https://bbs.huaweicloud.com/forum/thread-0290136720478298028-1-1.html  9.MySQL中的空格处理方法【转】 https://bbs.huaweicloud.com/forum/thread-02127136720383727033-1-1.html  10.MySQL中的SHOW FULL PROCESSLIST命令实现【转】 https://bbs.huaweicloud.com/forum/thread-02105136720261863025-1-1.html  11.SQL多行值合并一行字符串逗号分隔【转】 https://bbs.huaweicloud.com/forum/thread-0257136720162189020-1-1.html  12.SQL server常见的数据类型转换整理大全【转】 https://bbs.huaweicloud.com/forum/thread-0248136720112853029-1-1.html  13.SQL Server数据库游标的基本操作指南【转】 https://bbs.huaweicloud.com/forum/thread-0260136720025043021-1-1.html  14.SQL Server基础教程之游标(Cursor)【转】 https://bbs.huaweicloud.com/forum/thread-0266136719975532022-1-1.html  15.SQL去除字符串空格的ltrim()和rtrim()函数的实现【转】 https://bbs.huaweicloud.com/forum/thread-02127136719876232032-1-1.html  16.高性能负载均衡-分类和算法 https://bbs.huaweicloud.com/forum/thread-0248136637937517018-1-1.html  17.45 个 Git 经典操作场景,专治不会合代码【转】 https://bbs.huaweicloud.com/forum/thread-0248136629791027014-1-1.html  18.运维必备的17个技巧【转】 https://bbs.huaweicloud.com/forum/thread-0266136629427452015-1-1.html  19.没有Kubernetes怎么玩Dapr?【转】 https://bbs.huaweicloud.com/forum/thread-0257136629178535007-1-1.html  20.容器技术的发展历程【转】 https://bbs.huaweicloud.com/forum/thread-0229136628923618017-1-1.html