oracle如何拆分以逗号分隔的字符串为多列oracle 中可以用connect by把字符串按都好分割:
比如定义字符串:
pv_no_list :='23,34,45,56';
SELECT DISTINCT REGEXP_SUBSTR (pv_no_list,'[^,] ',1,LEVEL) as "token"
FROMDUAL
CONNECT BY REGEXP_SUBSTR (pv_no_list,'[^,] ',1,LEVEL) IS NOT NULL
order by 1
返回结果:
TOKEN
23
34
45
56
ORACLE 怎么拆分字符串拆分sql后:
select
substr('Hello World',0,instr('Hello World','o')) as 首,
substr('Hello World',instr('Hello World','o') 1) as 尾
from dual;
有什么规定吗?
“ABCDEFGH”或是“A , B,C,D,E,F , G,H"
按符号拆分?按位置拆分?
substr()函数:截取a-b之间的或a。如:substr('Hello World',0,5)截取1-5或
substr('Hello World',0,instr('Hello World','o'))截取1-"o"的位置
1.如果是" , "等符号:
select substr('Hello World',0,instr('Hello World','o'))from dual;
select substr('Hello World',instr('Hello World','o') 1)from dual;
或
select substr('Hello World',instr('Hello World','o') 1,length('Hello World'))from dual;
oracle里面怎么分割字符串(1)定义split_type类型:
CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000) /
(2)定义split函数:
CREATE OR REPLACE FUNCTION split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN split_type IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); my_split split_type := split_type (); BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE jlen LOOP j := INSTR (p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); my_split.EXTEND; my_split (my_split.COUNT) := str; IF i = len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := jlen1; my_split.EXTEND; my_split (my_split.COUNT) := str; END IF; END LOOP; RETURN my_split; END split; /
(3)存储过程中 , 使用类似
For T In ( select a,b,c,d from table (split('1,2,3,4',','))) Loop
--注意下面的inserti语句,varchar类型的值需要补充引号上去
Execute Immediate' insert into tableNameset fieldName = '||T.a ;
Execute Immediate'commit';
End Loop;
的查询语句,把分开的结果拼成sql语句并写入到表中 。
如何实现Oracle中字符串分隔在OracleE数据库oracle符串怎么分的应用中,经常遇到要对一个长oracle符串怎么分的字符串按指定oracle符串怎么分的分割符进行分割oracle符串怎么分的情况,这种分割的方法很多,在此介绍一个实际应用中觉得比较实用的方法 。根据面向对象的编程思想,把这个功能封装在一个包中实现,包头的实现如下:create or replace package pkg_split_str is--Purpose:按分隔符遍历字符串type t_strs is table of varchar2(255)index by binary_integer;v_split_strs t_strs;--对字符串按指定分割符时行分割的主要过程procedure split_str(i_str in varchar2,i_delimiter in varchar2);--总共有多少个子串function getEleCount return integer;--取出指定位置的子串function getElement(i_idx in integer)return varchar2;--测试程序procedure mytest(i_str in varchar......
oracle数据类型按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW RAW类型、ROWIDUROWID类型 。
在讲叙字符串类型前,先要讲一下编码 。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种 。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中 。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码 。这也是产生乱码的原因 。数据库的编码格式一般是在创建数据库时指定的 。当然也可以修改数据库的编码 。
一 字符串类型
1.1:CHAR类型 CHAR(size [BYTE | CHAR])
CHAR类型,定长字符串,会用空格填充来达到其最大长度 。非NULL的CHAR(12)总是包含12字节信息 。CHAR字段最多可以存储2,000字节的信息 。如果创建表时,不指定CHAR长度,则默认为1 。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节
注意:数据库的NLS_CHARACTERSET 为AL32UTF8 , 即一个汉字占用三到四个字节 。如果NLS_CHARACTERSET为ZHS16GBK , 则一个字符占用两个字节 。
1.2: NCHAR类型
这是一个包含UNICODE格式数据的定长字符串 。NCHAR字段最多可以存储2,000字节的信息 。它的最大长度取决于国家字符集 。
1.3 VARCHAR类型
不要使用VARCHAR数据类型 。使用VARCHAR2数据类型 。
1.4: VARCHAR2类型
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度 。VARCHAR2最多可以存储4,000字节的信息 。
1.5: NVARCHAR2类型
这是一个包含UNICODE格式数据的变长字符串 。NVARCHAR2最多可以存储4,000字节的信息 。
二. 数字类型
2.1 NUMBER类型
NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间 。
P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字
S是Scale的英文缩写,可以使用的范围为-84~127 。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时 , 表示从最大有效数字到小数点的位数
下面是官方文档的示例
Actual Data Specified As Stored As
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(3) 124
123.89 NUMBER(4,2) exceeds precision
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5).01234
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
2.2 INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数 。若插入、更新的数值有小数,则会被四舍五入 。
2.3 浮点数
Oracle 数据库提供了专为浮点数的两种数值数据类型:
BINARY_FLOAT
BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型 。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节 。
BINARY_DOUBLE
BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型 。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节 。
在数字的列中,浮点数有小数精度 。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度 。二进制浮点数支持的特殊值无穷大和 NaN (不是数字) 。
2.5 FLOAT类型
FLOAT类型也是NUMBER的子类型 。
Float(n),数 n 指示位的精度,可以存储的值的数目 。N 值的范围可以从 1 到 126 。若要从二进制转换为十进制的精度 , 请将 n 乘以 0.30103 。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度 。126 位二进制精度的最大值是大约相当于 38 位小数精度 。
三. 日期类型
日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的 。
3.1 DATE类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息 。虽然可以用字符或数字类型表示日期和时间信息 , 但是日期数据类型具有特殊关联的属性 。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒 。一般占用7个字节的存储空间 。
3.2 TIMESTAMP类型
这是一个7字节或12字节的定宽日期/时间数据类型 。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位
3.3 TIMESTAMP WITH TIME ZONE类型
这是TIMESTAMP类型的变种 , 它包含了时区偏移量的值
3.4 TIMESTAMP WITH LOCAL TIME ZONE类型
3.5 INTERVAL YEAR TO MOTH
3.6 INTERVAL DAY TO SECOND
四. LOB类型
内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据 , 如文本、图像、视屏、空间数据存储 。BLOB、CLOB、NCLOB类型
4.1 CLOB 数据类型
它存储单字节和多字节字符数据 。支持固定宽度和可变宽度的字符集 。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符
4.2 NCLOB 数据类型
它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据 。
4.3 BLOB 数据类型
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流 , 一般是图像、声音、视频等文件 。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据 。
4.4 BFILE 数据类型
二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理
五. RAWLONG RAW类型
5.1 LONG类型
它存储变长字符串 , 最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换 。ORACLE建议开发中使用CLOB替代LONG类型 。支持LONG 列只是为了保证向后兼容性 。CLOB类型比LONG类型的限制要少得多 。LONG类型的限制如下:
1.一个表中只有一列可以为LONG型 。(Why?有些不明白)
2.LONG列不能定义为主键或唯一约束 ,
3.不能建立索引
4.LONG数据不能指定正则表达式 。
5.函数或存储过程不能接受LONG数据类型的参数 。
6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)
5.2 LONG RAW 类型,能存储2GB 的原始二进制数据(不用进行字符集转换的数据)
5.3 RAW类型
用于存储二进制或字符类型数据,变长二进制数据类型 , 这说明采用这种数据类型存储的数据不会发生字符集转换 。这种类型最多可以存储2,000字节的信息
六. ROWIDUROWID类型
在数据库中的每一行都有一个地址 。然而,一些表行的地址不是物理或永久的,或者不是ORACLE数据库生成的 。
例如 , 索引组织表行地址存储在索引的叶子,可以移动 。
例如,外部表的ROWID(如通过网关访问DB2表)不是标准的ORACLE的rowid 。
ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表 。索引组织表有逻辑urowids的,和国外表的外urowids 。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id) 。
创建基于逻辑的rowid在表中的主键 。逻辑的rowid不会改变 , 只要主键不改变 。索引组织表的ROWID伪UROWID数据类型 。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句) 。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪 。
【oracle符串怎么分 oracle 字符串操作】关于oracle符串怎么分和oracle 字符串操作的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- bing如何连日本服务器,国内如何连接日本服务器
- 在微信咋截图啊视频号呢,如何截微信视频的图
- 如何导出sqlserver中数据,导出sqlserver数据表数据
- 游戏开发物语新手开局,游戏开发物语初期攻略
- 什么是C语言函数嵌套 c语言的函数嵌套
- 坐高空滑板什么感觉视频,高空滑板使用方法
- 手机怎么可以拍星星,用手机怎么拍星星?简单设置一下
- 怎么把显卡设置成1G,怎么设置显卡显存大小?
- oracle怎么走哈希 oracle哈希分区