1 cast(expr as type) 轉化任意類型expr 為指定的類型
2 convert(expr,type), 同 cast(expr as type)
3 convert(expr using transcoding_name) 在不同地字符集間轉化
4 binary expr select binary 'a'='A';
5 extractvalue() 從xml字符串中使用xpath提取值
6 updatexml()返回被替換的xml片段
7 位運算 & | << >> ^
8 加密解密
9 current_user,current_user() 返回當有客戶端驗證用戶
select user(); select current_user(); select * from mysql.user;
select session_user(); select system_user();
drop_user; rename_user
10 select database() 返回當前數據庫
select schema();
11 select fund_rows() 返回查詢行數
12 select last_insert_id()返回上一次插入的自增列值
13 select created table md5_tbl ;顯示創建表的腳本
14 select row_count()返回影響的行數
15 select version();
16 json_array([val[,val]...]) 返回包含這些值的json數組
select json_array(1,"a",null,true,curtime());
17 json_object([key,val[,key,val]...]) 返回包含這鍵值對的json對象 ,如果key是null或參數數量是奇數 發生出錯
select json_object('id',87,'name','carrot');
18 cast(value as json)轉貨為json類型
19 json_quote(string) 作為json值 使用雙引號引用一個字符串 ,並轉方特殊字符
select json_quote('null'),json_quote('"null"');
20 json_contains(target,candidate[,path]) 返回 1 或 0 指出是否candidate json文檔包含在target json文檔 或者如果有path參數是否candidate在指定的target文檔的path中存在
如果任一參數是null 或者path參數沒有指出target文檔中的一部分,則返回null,
如果target 或者 candidate不是有效的json文檔 或者如果path參數不是一個有效的路徑 報錯。
只檢查數據是否在路徑中存在可以用:json_contains_path()來代替
set @j='{"a":1,"b":2,"c":{"d":4}}';
set @j2="1";
select json_contains(@j,@j2,'$.a');
select json_contains(@j,@j2,'$.b');
set @j3='{"d":4}';
select json_contains(@j,@j3,'$.c');
21json_contains_path(json_doc,one or all,path[,path]...) 返回0或1 指示一個json文檔是否包含給定路徑下的數據
如果任何一個參數是null返回null,如果json_doc參數不是有效的json文檔 或任一路徑不是有效的路徑表達式 或者 one_or_all 不是 one 或 all,出錯。
one :1 如果至少一個路徑存在於文檔中,否則 0
all:1 如果所有路徑存在於文檔中,否則 0
set @j='{"a":1,"b":2,"c":{"d":4}}'; select json_contains_path(@j,'one','$.a','$.e'); select json_contains_path(@j,'all','$.a','$.e');
22 json_extract(json_doc,path[,path]...)返回從json文檔中按 path取到的部分數據。如果任一參數是null或沒有找到path中的數據則返回null.如果json-doc.path 不是有效的數據,則出錯
select json_extract('[10,20,[30,40]]','$[1]'); select json_extract('[10,20,[30,40]]','$[1]','$[0]');
select json_extract('[10],[20],[30,40]]','$[2][*]');
23 column->path 同 json_extract()
select c,json_extract(c,"$.id"),g from jemp where json_extract(c,"$.id")>1 order by json_extract(c,"$.name");
select c,c->"$.id",g from jemp where c->"$.id">1 order by c->"$.name";
update jemp set n=1 where c->"$.id"="4";
delete from jemp where c->"$.id"="4";
select a->"$[4]" from tj10 where a->"$[4][1]" is not null;
24 json_unquote(json_extract9column,path)) json_unquote(column->path) column->>path 返回不帶雙引號的數據
select c->'$.name' as name from jemp where g>2 ;
select json_unquote(c->'$.name') as name from jemp where g>2
select c->> '$.name' as name from jemp where g>2
25 json_keys(json_doc[,path]) 以json數組方式,返回頂層鍵值。如果有path參數,返回path參數中的頂層鍵值
select json_keys('{"a":1,"b":{"c":30}}'); select json_keys('{"a":1,"b":{"c":30}}','$.b');
26 json_search(json_doc,one_or_all,search_str(,escape_cahr[,path]...])
從json_doc 返回給定的字符 search_str 對應的部分數據
set @j='["abc",[{"k":"10"},"def"],{"x":"abc"},{"y":"bcd"}]';
select json_search(@j,'one','abc');
select json_search(@j,'all','abc');
select json_search(@j,'all','10');
26 json_array_append(json_doc,path,val[,path,val]...) 添加值到json文檔的指定的數組中,並返回結果值
如果 path 指示一個范圍或對象值,則添加到path對象后成為一個數組
set @j='["a",["b","c"],"d"]';
select json_array_append(@j,'$[1]',1); select json_array_append(@j,'$[0]',2);select json_array_append(@j,'$[1][0]',3);
set @j='{"a":1,"b":[2,3],"c":4}'; select json_array_append(@j,'$.b','x'); select json_array_append(@j,'$','z');
27 json_array_insert(json_doc,path,val[,path,val]...):更新json文檔,插入到文檔中的數組中返回修改后的文檔,如果 path指定一個數組中的元素,插入到這個元素的位置,其他數據往右移。
set @j='["a",{"b":[1,2]},[3,4]]'; select json_array_insert(@j,'$[1]','x'); select json_array_insert(@j,'$[100]','x');
select json_array_insert(@j,'$[1].b[0]','x'); select json_array_insert(@j,'$[0]','x','$[2][1]','y');select json_array_insert(@j,'$[0]','x','$[2].b[1]','y');
插入一個值后,后面的值要按插入值后的序列取位置
28 json_insert(json_doc,path,val[,path,val]...) 插入數據到json_doc並返回結果
如果在路徑下存在值不重寫存在 的值
如果元素不存在則插入數據,如果指定位置大於數組,則數組利用這個新值擴大。如果存在的值不是數組,則自動組成一個數組。
set @j='{"a":1,"b":[2,3]}'; select json_insert(@j,'$.a',10,'$.c','[true,false]'); $.a 存在則不插入數據 true/false 沒有轉為json數組
select josn_insert(@j,'$.c',cast('[true,false]' as json)); 轉為json
28 json_merge_patch(json_doc,json_doc[,json_doc]...) 合並多個json文檔並返回沒有重復鍵的合並后的結果
如果只有一個參數則出錯
如果第一參數不是一個對象,則作為空對象與第二個參數合並
如果第二個參數不是一個對象,則合並結果是第二個參數(不是null值的)
如果參數都是對象則合並規則:第一個對象中在第二個對象中不存在的鍵,第二個對象中在第一個中不存在的鍵,在2個對象中都存在的元素則取第二個對象中的值(不是null值的),
select json_merge_patch('[1,2]','[true,false]'); 如果第二個參數不是對象合並結果是第二個參數值
select json_merge_patch('{"name":"x"}','{"id":44}');
select json_merge_patch('1','true');如果第一個不是對象則取第二個值
select json_merge_patch('[1,2]','{"id":44}'); 第一個不是對象則按空對象合並
select json_merge_patch('{"a":1,"b":2}','{"a":3,"c":4}'); 2個鍵相同則取第2個鍵值
select json_merge_patch('{"a":1,"b":2}','{"b":null}'); 如果有相同值則取第二個參數中的數據如果在第二個參數中是空值則移除值
select json_merge_patch('{"a":{"x":1}}','{"a":{"y":2}}'); 遞歸合並
json_merge_patch() 與 json_merge_Preserve() 比較
json_merge_patch() 移除第一個參數中鍵值與第二個參數相同的對象,取第二個參數中不為null的值
json_merge_pathc()如果第二個參數中有相同元素鍵與第一個參數元素相同,則用第二個參數中的值替換第一個參數中的值,
json_merge_preserve()則追加第二個參數中的值到第一個參數中
set @x='{"a":1,"b":2}',@y='{"a":3,"c":4}',@z='{"a":5,"d":6}';
select json_merge_patch(@x,@y,@z) as patch,json_merge_preserve(@x,@y,@z) as preserve;
json_merge_preserve():合並2個相鄰的數組成本一個;合並相鄰的對象成一個;常量做為數組合並為一個數組;一個數組和一個對象相鄰則自動包裝對象為一個數組合並為一個數組。
select json_merge_preserve('[1,2]','[true,false]');2個 數組合並為一個數組
select json_merge_preserve('1','true');作為數組 合並為一個數組
select json_merge_preserve('{"name":"x"}','{"id":44}'); 2個對象合並為一個對象
select json_merge_preserve('[1,2]','{"id":44}'); 一個數組一個對象---對象做為數組合並為一個數組
29 json_remove(json_doc,path[,path]...) 從json_doc移除數據並返回結果
set @j='["a",["b","c"],"d"]'; select json_remove(@j,'$[1]');
30 json_replace(json_doc,path,val[,path,val]...) 替換在json文檔中存在的值,並返回結果.如果路徑不存在則不影響
set @j='{"a":1,"b":[2,3]}'; select json_replace(@j,'$.a',10,'$.c','[true,false]');
31 json_set(json_doc,path,val[,path,val]...) 插入或更新json_doc的數據,並返回結果
如果 一個元素不存在於json_doc中,這個元素被添加到對象中
如果一個位置放在已存在的數組的最后,則數組添加這個新值。如果存在的值不是數組,則被做為數組與新值一起組成數組
json_set() 替換存在的值並添加不存在的值;
json_insert()插入值不替換存在的值
json_replace() 替換存在的值
set @j='{"a":1,"b":[2,3]}'; select json_set(@j,'$.a',10,'$.c','[true,false]');
select json_insert(@j,'$.a',10,'$.c','[true,false]');
select json_replace(@j,'$.a',10,'$.c','[true,false]');
32json_depth(json_doc) 返回json_doc最大深度
空數組/空對象、深度為1的值,一個僅包含一個元素 且深度為1非空數組 或一個僅包含一個對象值並深度為1的非空對象 深度為 2.其他情況 下深度都大於2
select json_depth('{}'),json_depth('[]'),json_depth('true');
select json_depth('[10,20]'),json_depth('[[],{}]');
select json_depth('[10,{"a":20}]');
33 json_length(json_doc[,path]) 返回json_doc 或path參數指寫的文檔的長度
常量的長度是1
一個數組的長度是這個數組元素的個數
一個對象的長度是這個對象中成員的個數
不計算嵌套的長度
select json_length('[1,2,{"a":3}]');
select json_length('{"a":1,"b":{"c":30}}');
select json_length('{"a":1,"b":{"c":30}}','$.b');
34 json_type(json_val) 返回json值的類型
set @j='{"a":[10,true]}';
select json_type(@j);
select json_type(json_extract(@j,'$.a'));
select json_type(json_extract(@j,'$.a[0]'));
35 json_valid(val) 返回 0 或1 指示 是否是有效的json,如果參數是null返回null
select json_valid('{"a":1}'); select json_valid('hello'); select json_valid('"hello"');
36 json_pretty(json_val) 格式化顯示json文檔
select json_pretty('["a",1,{"key1":"value1"},"5","77",{"key2":["value3","valueX","valueY"]},"j","2"]');
37 json_storage_size(json_val) 返回json_val存儲字符數
select json_storage_size('["a",1,{"key1":"value1"},"5","77",{"key2":["value3","valueX","valueY"]},"j","2"]');
select json_storage_size('"a "') 計算空格 標點 占字符數