您所在的位置:首页 > 新闻中心 > 列转行的Sql语句总结,PHP5常用函数列表
公司要闻
列转行的Sql语句总结,PHP5常用函数列表
发布时间:2020-04-02 17:44
访问量:359

初藳地址:http://www.maomao365.com/?p=7307

多行转字符串

本条比较容易,用||或concat函数能够完毕

 SQL Code 

1
2

  

select concat(id,username) str from app_user
select id||username str from app_user

经常来说所示:

摘要:

字符串转多列

实在正是拆分字符串的主题素材,能够选取substr、instr、regexp_substr函数格局

  usleep(卡塔尔 函数延迟代码实践多少皮秒。
  unpack() 函数从二进制字符串对数据开展解包。
  uniqid(卡塔尔(قطر‎ 函数基于以飞秒计的如今时间,生成三个独一的 ID。
  time_sleep_until(State of Qatar 函数延迟代码实施直到钦命的时辰。
  PHP5常用函数之time_nanosleep(卡塔尔(قطر‎ 函数延迟代码推行多少秒和皮秒。
  sleep(卡塔尔 函数延迟代码实行多少秒。
  show_source(State of Qatar 函数对文本进行语法高亮显示。
  strip_whitespace(卡塔尔国 函数再次回到已去除 PHP 注释以至空白字符的源代码文件。
  pack(卡塔尔国 函数把多少装入一个二进制字符串。
  ignore_user_abort(State of Qatar 函数设置与客商机断开是不是会甘休脚本的推行。
  highlight_string(卡塔尔(قطر‎ 函数对字符串举行语法高亮突显。
  highlight_file(卡塔尔 函数对文件实行语法高亮呈现。
  PHP5常用函数之get_browser(State of Qatar 函数重回客户浏览器的习性。
  exit(卡塔尔(قطر‎ 函数输出一条音信,并退出当前剧本。
  eval(State of Qatar 函数把字符串遵照 PHP 代码来测算。
  die(State of Qatar 函数输出一条音信,并脱离当前剧本。
  defined(卡塔尔国 函数检查某常量是还是不是留存。
  define(卡塔尔 函数定义八个常量。
  constant(State of Qatar 函数重临常量的值。
  PHP5常用函数之connection_status(卡塔尔 函数重返当前的连接情形。
  connection_aborted(卡塔尔 函数检查是或不是断开顾客机。
  zip_read(卡塔尔(قطر‎ 函数读取打开的 zip 档案中的下三个文书。
  zip_open(卡塔尔国 函数展开 ZIP 文件以供读取。
  zip_entry_read(卡塔尔 函数从展开的 zip 档案项目中获得内容。
  zip_entry_open(卡塔尔国 函数展开三个 ZIP 档案项目以供读取。
  PHP5常用函数之zip_entry_name(卡塔尔(قطر‎ 函数重回 zip 档案项指标称呼。
  zip_entry_filesize(卡塔尔 函数重临 zip 档案项目标原始大小(在减小早先卡塔尔。
  zip_entry_compressionmethod(State of Qatar 函数重返 zip 档案项目标裁减方法。
  zip_entry_compressedsize(State of Qatar 函数重返 zip 档案项目标压缩文件尺寸。
  zip_entry_close(卡塔尔国 函数关闭由 zip_entry_open(卡塔尔国 函数展开的 zip 档案文件。
  zip_close(卡塔尔(قطر‎ 函数关闭由 zip_open(卡塔尔 函数张开的 zip 档案文件。
  xml_set_unparsed_entity_decl_handler(卡塔尔国函数规定在遇到无法解析的实业名称(NDATA卡塔尔(قطر‎证明时被调用的函数。
  xml_set_processing_instruction_handler(卡塔尔 函数规定当解析器在 XML 文书档案中找随地理指令时所调用的函数。
  xml_set_object(State of Qatar 函数允许在指标中应用 XML 深入剖析器。
  PHP5常用函数之xml_set_notation_decl_handler(卡塔尔(قطر‎ 函数规定当深入深入分析器在 XML 文书档案中找到符号表明时被调用的函数。
  xml_set_external_entity_ref_handler(卡塔尔国 函数规定当剖析器在 XML 文书档案中找到外界实体时被调用的函数。
  xml_set_element_handler(卡塔尔国 函数创设初阶和停止成分微机。
  xml_set_default_handler(卡塔尔 函数为 XML 剖判器创设暗中认可的数码微处理器。
  xml_set_character_data_handler(卡塔尔国 函数营造字符数据微机。
  xml_parser_set_option(卡塔尔(قطر‎ 函数为 XML 深入深入分析器举办精选设置。
  xml_parser_get_option(卡塔尔(قطر‎ 函数从 XML 剖析器获取选项设置音信。
  xml_parser_free(卡塔尔(قطر‎ 函数释放 XML 解析器。
  PHP5常用函数之xml_parser_create(卡塔尔国 函数创造 XML 深入深入分析器。
  xml_parser_create_ns(State of Qatar 函数创立带有命名空间支撑的 XML 深入深入分析器。
  xml_parse_into_struct(卡塔尔国 函数把 XML 数据深入分析到数组中。
  xml_parse(卡塔尔国 函数解析 XML 文书档案。
  xml_get_error_code(卡塔尔国 函数获取 XML 深入深入分析器错误代码。
  xml_get_current_line_number(卡塔尔国 函数获取 XML 解析器的近日进号。
  xml_get_current_column_number(卡塔尔国 函数获取 XML 剖析器的当下列号。
  PHP5常用函数之xml_get_current_byte_index(卡塔尔国 函数获取 XML 拆解深入分析器的当前字节索引。
  xml_error_string(卡塔尔(قطر‎ 函数获取 XML 深入分析器的失实描述。
  utf8_encode(卡塔尔(قطر‎ 函数把 ISO-8859-1 字符串编码为 UTF-8。
  utf8_decode(卡塔尔 函数把 UTF-8 字符串解码为 ISO-8859-1。
  wordwrap(State of Qatar 函数遵照钦定长度对字符串实行折行管理。
  vsprintf(卡塔尔国 函数把格式化字符串写入变量中。
  vprintf(卡塔尔国 函数输出格式化的字符串。
  vfprintf(卡塔尔国 函数把格式化的字符串写到内定的输出流。
  PHP5常用函数之ucwords(卡塔尔国 函数把字符串中每种单词的首字符转换为大写。
  ucfirst(卡塔尔 函数把字符串中的首字符转变为大写。
  trim(State of Qatar 函数从字符串的互相删除空白字符和别的预订义字符。
  substr_replace(卡塔尔 函数把字符串的一片段替换为另叁个字符串。
  substr_count(State of Qatar 函数计算子串在字符串中冒出的次数。
  substr_compare(卡塔尔国 函数从钦定的上马长度相比多少个字符串。
  substr(卡塔尔 函数重临字符串的一片段。
  strtr(卡塔尔 函数调换字符串中一定的字符。
  strtoupper(卡塔尔 函数把字符串转换为大写。
  strtolower(卡塔尔国 函数把字符串转换为小写。
  PHP5常用函数之strtok(卡塔尔 函数把字符串分割为越来越小的字符串。
  strstr(卡塔尔 函数找寻一个字符串在另一个字符串中的第一遍现身。
  strspn(卡塔尔 函数重临在字符串中包罗的特定字符的数量。
  strrpos(卡塔尔国 函数查找字符串在另多个字符串中最终二遍现身的职位。
  strripos(State of Qatar 函数查找字符串在另三个字符串中最终三回现身的职位。
  strrev(卡塔尔国 函数反转字符串。
  strrchr(State of Qatar函数查找字符串在另三个字符串中最终二遍面世的职责,并再次回到从该职位到字符串结尾的保有字符。
  strpos(卡塔尔(قطر‎ 函数重回字符串在另四个字符串中第二遍面世的地方。
  PHP5常用函数之strpbrk(State of Qatar 函数在字符串中搜寻钦定字符中的大肆三个。
  strncmp(State of Qatar 函数相比五个字符串。
  strncasecmp(卡塔尔 函数相比多个字符串。
  strnatcmp(卡塔尔 函数使用一种“自然”算法来相比四个字符串。
  strnatcasecmp(卡塔尔国 函数使用一种“自然”算法来相比三个字符串。
  strlen(卡塔尔(قطر‎ 函数重返字符串的长短。
  stristr(卡塔尔 函数查找字符串在另叁个字符串中第一次面世之处。
  stripos(卡塔尔 函数重返字符串在另二个字符串中首先次面世的岗位。
  stripslashes(卡塔尔 函数删除由 addslashes(卡塔尔 函数增多的反斜杠。
  stripcslashes(卡塔尔国 函数删除由 addcslashes(卡塔尔国 函数增添的反斜杠。
  strip_tags(卡塔尔 函数剥去 HTML、XML 以至 PHP 的价签。
  strcspn(卡塔尔国 函数重回在找到任何钦赐的字符此前,在字符串查找的字符数。
  PHP5常用函数之strcoll(卡塔尔(قطر‎ 函数比较八个字符串。
  strcmp(卡塔尔国 函数比较七个字符串。
  strchr(卡塔尔 函数搜索二个字符串在另三个字符串中的第三遍面世。
  strcasecmp(State of Qatar 函数比较八个字符串。
  str_word_count(卡塔尔 函数总括字符串中的单词数。
  str_split(卡塔尔(قطر‎ 函数把字符串分割到数组中。
  str_shuffle(State of Qatar 函数随机地打乱字符串中的全部字符。
  str_rot13(卡塔尔 函数对字符串推行 ROT13 编码。
  str_replace(卡塔尔 函数使用叁个字符串替换字符串中的另一对字符。
  str_repeat(State of Qatar 函数把字符串重复钦点的次数。
  str_pad(卡塔尔国 函数把字符串填充为钦定的尺寸。
  str_ireplace(State of Qatar 函数使用多少个字符串替换字符串中的另一对字符。
  PHP5常用函数之sscanf(卡塔尔(قطر‎函数基于内定的格式拆解剖析来自三个字符串的输入。
  sprintf(卡塔尔国 函数把格式化的字符串写写入一个变量中。
  soundex(State of Qatar 函数总计字符串的 soundex 键。
  similar_text(卡塔尔 函数总计三个字符串的非凡字符的多寡。
  sha1_file(卡塔尔(قطر‎ 函数总结文件的 SHA-1 散列。
  sha1(卡塔尔 函数总计字符串的 SHA-1 散列。
  setlocale(卡塔尔(قطر‎ 函数设置地区消息(地域音讯卡塔尔。
  PHP5常用函数之rtrim(State of Qatar P rtrim(卡塔尔国 函数

   从前分割字符串时,都利用相通split函数的章程管理,下文分享一种对有规律的字符串的相间格局,

字符串转多行

利用union all函数等情势

   即:1.行使replace函数,将字符串产生合规的xml格式串

wm_concat函数

先是让我们来寻访这些美妙的函数wm_concat(列名卡塔尔,该函数能够把列值以","号分隔起来,并出示成一行,接下去上例子,看看那些神奇的函数怎样选拔计划测量试验数据

 SQL Code 

1
2
3
4
5
6

  

create table test(id number,name varchar2(20));
insert into test values(1,'a');
insert into test values(1,'b');
insert into test values(1,'c');
insert into test values(2,'d');
insert into test values(2,'e');

       2.施用xml.value的不二等秘书籍赢得钦定的字符串消息

功效1 : 行转列 ,暗中认可逗号隔开分离

 SQL Code 

1

  

select wm_concat(name) name from test;

   

图片 1

    如下所示:

效果2: 把结果里的逗号替换到"|"

 SQL Code 

1

  

select replace(wm_concat(name),',','|') from test;

   

图片 2

    实验蒙受:sqlserver 二零一零 陆风X82  

成效3: 按ID分组合併name

 SQL Code 

1

  

select id,wm_concat(name) name from test group by id;

   

图片 3

sql语句等同于下边包车型客车sql语句:

  SQL Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

  

-------- 适用范围:8i,9i,10g及以后版本  ( MAX + DECODE )
select id,
       max(decode(rn, 1, name, null)) ||
       max(decode(rn, 2, ',' || name, null)) ||
       max(decode(rn, 3, ',' || name, null)) str
  from (select id,
               name,
               row_number() over(partition by id order by name) as rn
          from test) t
 group by id
 order by 1;
-------- 适用范围:8i,9i,10g及以后版本 ( ROW_NUMBER + LEAD )
select id, str
  from (select id,
               row_number() over(partition by id order by name) as rn,
               name || lead(',' || name, 1) over(partition by id order by name) ||
               lead(',' || name, 2) over(partition by id order by name) || 
               lead(',' || name, 3) over(partition by id order by name) as str
          from test)
 where rn = 1
 order by 1;
-------- 适用范围:10g及以后版本 ( MODEL )
select id, substr(str, 2) str
  from test model return updated rows partition by(id) dimension by(row_number() 
  over(partition by id order by name) as rn) measures(cast(name as varchar2(20)) as str) 
  rules upsert iterate(3) until(presentv(str [ iteration_number + 2 ], 1, 0) = 0)
  (str [ 0 ] = str [ 0 ] || ',' || str [ iteration_number + 1 ])
 order by 1;
-------- 适用范围:8i,9i,10g及以后版本 ( MAX + DECODE )
select t.id id, max(substr(sys_connect_by_path(t.name, ','), 2)) str
  from (select id, name, row_number() over(partition by id order by name) rn
          from test) t
 start with rn = 1
connect by rn = prior rn + 1
       and id = prior id
 group by t.id;

   

--例:
-----获取下面字符串中中括号中的内容
-----我们可以将下列规则的字符串采用replace替换为XML格式的字符串,然后采用xml select获取相关信息
DECLARE @stringInfo   VARCHAR(MAX) ='1:[猫猫小屋],2:[字符串分割],3:[sql教程博客]'
      , @q VARCHAR(3)   =3;  ---获取第三个分割符中的信息

declare @xmlInfo xml ;

set @stringInfo = '<xmlInfo keyId ="'+@stringInfo;
set @stringInfo = REPLACE(@stringInfo, '[', '" value="');
set @stringInfo = REPLACE(@stringInfo, '],', '" /><xmlInfo keyId ="');
set @stringInfo = REPLACE(@stringInfo, ']', '" />');
set @stringInfo = REPLACE(@stringInfo, ':', '');

set @xmlInfo = CONVERT(xml,@stringInfo); 


SELECT @xmlInfo as [xmlInfo],
@xmlInfo.value('(/xmlInfo[@keyId=sql:variable("@q")]/@value)[1]',
 'varchar(60)');

懒人扩张用法:

案例: 小编要写三个视图,相仿"create or replace view as select 字段1,...字段50 from tablename" ,基表有50四个字段,固然靠手工写太难为了,有未有啥样简便的办法? 当然有了,看本人假使应用wm_concat来让那几个须求变简单,借使本身的应用软件_USE智跑表中有(id,username,password,age)4个字段。查询结果如下

 SQL Code 

1
2
3
4
5

  

/** 这里的表名默认区分大小写 */
select 'create or replace view as select ' || wm_concat(column_name) ||
       ' from APP_USER' sqlStr
  from user_tab_columns
 where table_name = 'APP_USER';

   

图片 4

运用连串表方式查询

 SQL Code 

1

  

select * from user_tab_columns

 

Oracle 11g 行列调换 pivot 和 unpivot 表明

在Oracle 11g中,Oracle 又充实了2个查询:pivot(行转列) 和unpivot(列转行)

参考:)

google 一下,英特网有一篇相比详细的文书档案:

 

pivot 列转行

测量试验数据 (id,类型名称,发售数额State of Qatar,案例:遵照水果的品类查询出一条数据突显出各个档期的顺序的销售数量。

 SQL Code 

1
2
3
4
5
6
7
8
9

  

create table demo(id int,name varchar(20),nums int);  ---- 创建表
insert into demo values(1, '苹果', 1000);
insert into demo values(2, '苹果', 2000);
insert into demo values(3, '苹果', 4000);
insert into demo values(4, '橘子', 5000);
insert into demo values(5, '橘子', 3000);
insert into demo values(6, '葡萄', 3500);
insert into demo values(7, '芒果', 4200);
insert into demo values(8, '芒果', 5500);

   

图片 5

分组查询 (当然那是不切合查询一条数据的渴求的)

 SQL Code 

1

  

select name, sum(nums) nums from demo group by name

图片 6

行转列查询

 SQL Code 

1

  

select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));

图片 7

注意: pivot(聚合函数 for 列名 in(类型)) ,在这之中 in(''卡塔尔(قطر‎中得以钦定别称,in中仍可以钦命子查询,比方 select distinct code from customers

当然也足以不利用pivot函数,等同于下列语句,只是代码相比长,轻易明白

 SQL Code 

1
2
3
4
5

  

select *
  from (select sum(nums) 苹果 from demo where name = '苹果'),
       (select sum(nums) 橘子 from demo where name = '橘子'),
       (select sum(nums) 葡萄 from demo where name = '葡萄'),
       (select sum(nums) 芒果 from demo where name = '芒果');

 

unpivot 行转列

从名称想到所包含的意义就是将多列调换到1列中去
案例:近日有叁个水果表,记录了4个季度的行销数目,以后要将每一个水果的各种季度的出售情形用多行数据展现。

创造表和数码

 SQL Code 

1
2
3
4
5
6

  

create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);
insert into Fruit values(1,'苹果',1000,2000,3300,5000);
insert into Fruit values(2,'橘子',3000,3000,3200,1500);
insert into Fruit values(3,'香蕉',2500,3500,2200,2500);
insert into Fruit values(4,'葡萄',1500,2500,1200,3500);
select * from Fruit

图片 8

列转行查询

 SQL Code 

1

  

select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

专心: unpivot未有聚合函数,xiaoshou、jidu字段也是权且的变量

图片 9

同一不使用unpivot也得以兑现均等的功效,只是sql语句会很短,何况实践过程效能也从不前面二个高

 SQL Code 

1
2
3
4
5
6
7

  

select id, name ,'Q1' jidu, (select q1 from fruit where id=f.id) xiaoshou from Fruit f
union
select id, name ,'Q2' jidu, (select q2 from fruit where id=f.id) xiaoshou from Fruit f
union
select id, name ,'Q3' jidu, (select q3 from fruit where id=f.id) xiaoshou from Fruit f
union
select id, name ,'Q4' jidu, (select q4 from fruit where id=f.id) xiaoshou from Fruit f

XML类型

上述pivot列转行示例中,你早就掌握了亟需查询的项目有何样,用in(卡塔尔(قطر‎的方法包涵,假如借使你不知晓都有怎么着值,您怎么塑造查询呢?

pivot 操作中的另三个子句 XML 可用以减轻此难题。该子句允许你以 XML 格式创制实行了 pivot 操作的出口,在这里输出中,您能够钦赐一个特有的子句 ANY 而非文字值

演示如下:

 SQL Code 

1
2
3
4
5
6
7

  

select * from (
   select name, nums as "Purchase Frequency"
   from demo t
)                              
pivot xml (
   sum(nums) for name in (any)
)

图片 10

如您所见,列 NAME_XML 是 XMLTYPE,在那之中根成分是 <PivotSet>。每一种值以名称-值成分没有错样式表示。您能够应用此外 XML 解析器中的输出生成更使得的输出。

图片 11

对此该xml文件的剖释,贴代码如下:

  SQL Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

 

create or replace procedure ljz_pivot_xml_sp(pi_table_name   varchar2,
                                             pi_column_name  varchar2,
                                             pi_create_table varchar2) as
  v_column      nvarchar2(50);
  v_count       number := 0;
  v_i           number;
  v_parent_node nvarchar2(4000);
  v_child_node  nvarchar2(4000);
  v_over        boolean := false;
  v_tmp         nvarchar2(50);
  v_existsnode  number;
  v_sql         clob;
  v_name        varchar2(30);
  v_name_xml    xmltype;
begin
  v_sql         := 'select x.* from ' || pi_table_name ||
                   ' a, xmltable(''/PivotSet'' passing a.' ||
                   pi_column_name || ' columns ';
  v_parent_node := '/PivotSet';
  v_child_node  := 'item[1]/column[2]';
  v_i           := 1;
  execute immediate 'select ' || pi_column_name || ' from ' ||
                    pi_table_name || ' where rownum=1'
    into v_name_xml;
  select existsnode(v_name_xml,
                    '/PivotSet/item[' || to_char(v_i) || ']/column[1]')
    into v_existsnode
    from dual;
  while v_existsnode = 1 loop
    execute immediate 'select substr(extractvalue(' || pi_column_name ||
                      ', ''/PivotSet/item[' || to_char(v_i) || ']/column[1]''),1,30)
    from ' || pi_table_name || ' x'
      into v_name;
    v_sql := v_sql || '"' || v_name || '" varchar2(30) path ''item[' ||
             to_char(v_i) || ']/column[2]'',';
    v_i   := v_i + 1;
    select existsnode(v_name_xml,
                      '/PivotSet/item[' || to_char(v_i) || ']/column[1]')
      into v_existsnode
      from dual;
  end loop;
  v_sql := trim(',' from v_sql) || ') x';
  commit;
  select count(1)
    into v_count
    from user_tab_columns
   where table_name = upper(pi_create_table);
  if v_count = 0 then
    execute immediate 'create table ' || pi_create_table || ' as ' || v_sql;
  end if;
end;

 

首先个参数为要深入分析xml文件所属数据表,第三个参数为要分析xml所存字段,第三个参数贮存解析后的多少集。

测试:

begin

ljz_pivot_xml_sp('(select * from (select deptno,sal from emp) pivot xml(sum(sal) for deptno in(any)))',

'deptno_xml',

'ljz_pivot_tmp');

end;

图片 12

初学oracle xml深入分析,这种情势相比较愚拙,多少个多个循环列,原型如下:

select extractvalue(name_xml, '/PivotSet/item[1]/column[1]')

from (select * from (select name,nums from demo) pivot xml(sum(nums) for name in(any))) x

where existsnode(name_xml, '/PivotSet/item[1]/column[1]') = 1;

图片 13

select x.*

from (select *

from (select name, nums from demo)

pivot xml(sum(nums)

for name in(any))) a,

xmltable('/PivotSet' passing a.name_xml columns

芒果 varchar2(30) path 'item[1]/column[2]',

苹果 varchar2(30) path 'item[2]/column[2]') x

图片 14

不知是否存在直接进行深入深入分析的措施,这种格局还不及直接行列转换,不通过xml转来转去。

select '''' || listagg(substr(name, 1, 30), q'{','}') within group(order by name) || ''''

from (select distinct name from demo);

图片 15

select *

from (select name, nums from demo)

pivot(sum(nums)

for name in('苹果', '橘子', '葡萄', '芒果'));

图片 16

那般拼接字符串反而愈发便利。

结论

Pivot 为 SQL 语言扩张了三个超级重大且实用的法力。您可以选取 pivot 函数针对任何关联表创立一个交叉表报表,而不用编写包涵大量 decode 函数的令人费解的、不直观的代码。相似,您能够利用 unpivot 操作转变任何交叉表报表,以常规关系表的样式对其展开仓储。Pivot 能够调换常规文本或 XML 格式的出口。假若是 XML 格式的出口,您不要钦点 pivot 操作供给搜索的值域。