Oracle还是SQL中字符函数中有没有替换功能

Oracle还是SQL中字符函数中有没有替换功能,第1张

stuff  是 SQL Server 的函数, 功能是:

删除指定长度的字符并在指定的起始点插入另一组字符

例如:

1> SELECT

2>   STUFF(',1,2,3', 1, 1, '') A,

3>   STUFF(';A;B;C', 1, 3, 'Z;') B,

4>   STUFF('X;Y;Z', 3, 1, 'C') C

5> go

A      B     C

------ ----- ------

1,2,3  Z;B;C X;C;Z

(1 行受影响)

Oracle  没有这个函数, 但是可以使用 SUBSTR  来实现相同的功能

CREATE OR REPLACE FUNCTION STUFF(

  v_BaseStr VARCHAR2,

  v_StartIndex INT,

  v_Length INT,

  v_ReplaceStr VARCHAR2

)RETURN VARCHAR2 IS

BEGIN

  RETURN 

    SUBSTR(v_BaseStr, 1, v_StartIndex - 1) ||

    v_ReplaceStr ||

    SUBSTR(v_BaseStr, v_StartIndex + v_Length);

END;

/

函数已创建。

SQL> SELECT

  2    STUFF (',1,2,3', 1, 1, '') A,

  3    STUFF(';A;B;C', 1, 3, 'Z;') B,

  4    STUFF('X;Y;Z', 3, 1, 'C') C

  5  FROM

  6    dual;

A

-----------------------------------------------------

B

-----------------------------------------------------

C

-----------------------------------------------------

1,2,3

Z;B;C

X;C;Z

你是要把tab_a表的11,22,33,44拆分成 11 22 33 44 ,然后去tab_b表找到11 22 33 44对应的b字段,然后根据查到的b字段拼接成aa,bb,cc,dd

Database character set (AL32UTF8) and Client characterset (ZHS16GBK) are different

Character set conversion may cause unexpected results

Note: you can set the client character set through the NLS_LANG environmentvariable or the NLS_LANG registry key in

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1

SIMPLIFIED CHINESE_CHINAZHS16GBK 包含 AMERICAN_AMERICAAL32UTF8

这可是个麻烦事,不是改客户端字符集的问题。要改数据库的字符集。我是自己笔记本上面的oracle11g,所以胆子还是很大的:

SQL> conn /as sysdba

SQL> shutdown immediate;

SQL> startup mount

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL> alter database open;

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

ORA-12712: new character set must be a superset of old character set

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

--我们看到这个过程和之前ALTER DATABASE CHARACTER SET *** 作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验

SQL> select from v$nls_parameters;

SQL> shutdown immediate;

SQL> startup

SQL> select from v$nls_parameters;

以后安装oracle11g的时候记得选择自定义安装,把这个字符集的事情事先弄好。

“让生命如夏日花朵般美丽,死亡如秋叶般平静。”“鸟儿愿为一朵白云,云儿愿为一只鸟。”“天空没有留下痕迹,但我已经飞过。”这是多么优美的句子啊!这些句子让我印象深刻,它们都出自泰戈尔的经典诗集——《飞鸟集》。

《飞鸟集》由105段诗歌组成。每段诗歌都只有简短的两三句话,但是多读几遍《飞鸟集》,再细细品味,你会有不一样的感觉。泰戈尔的经典诗集,是爱与美的交织。

刚开始读《飞鸟集》,我就喜欢上它的语言。它的语言非常优美,朗朗上口,有一种甜蜜柔嫩的新鲜气息,如花朵般绽放在每一页诗上。

第二遍读泰戈尔的诗,觉得韵味醇厚,使人深受教育。“树根给予树枝果实,却不求回报。”这句话把父母比作根,把孩子比作果。这让我想起了我的父母。我的父母都是上班族,每天他们既要上班,又要照顾我,可以说,父母每天的生活都像打仗一样:早上要先送我到学校,他们才匆匆去上班;下班第一件事是要冲到学校接我,回到家一个煮饭菜,一个辅导我写作业,很累很累。但是父母这么关心疼爱我,从来不求回报,我很感动,总是尽力多帮助父母做我力所能及的事。

“只知道把自己照在树林中,让大家生长。”“如果你因为失去了太阳而流泪,那么也将失去群星了。”这些不仅是美丽的诗句,更是浓缩的智慧和真理,泰戈尔诗集让我明白了许多道理。

(指导老师:爱之链)

点评:

泰戈尔的《飞鸟集》深深打动了小作者,爱与美交织的诗意与哲理,不仅给了她文学的美好享受,还给予她智慧的思考。

是这个意思吧?

SQL> select regexp_replace('123|||456|||||789||191|000||234','(\|){2,}','|') regexp_replace from dual;

REGEXP_REPLACE

-----------------------

123|456|789|191|000|234

SQL>

以上就是关于Oracle还是SQL中字符函数中有没有替换功能全部的内容,包括:Oracle还是SQL中字符函数中有没有替换功能、Oracle SQL 根据数据字典多次替换字符串、如何修改Oracle数据库字符集等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9683646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存