SQL/JSON feature PostgresSQL 11.0 Oracle 18c MySQL 8.0 MS SQL Server 2017 Comments
JSON_OBJECT
JSON_OBJECT(k : v)              
MySQL: JSON_OBJECT(k, v, ...) syntax, duplicate keys removed
JSON_OBJECT(KEY k VALUE v)      
Oracle: duplicate keys removed
JSON_OBJECT(k VALUE v)          
Oracle: duplicate keys removed
JSON_OBJECT(WITH UNIQUE)        
JSON_OBJECT(WITHOUT UNIQUE)     
JSON_OBJECT(ABSENT ON NULL)     
JSON_OBJECT(NULL ON NULL)       
JSON_ARRAY
JSON_ARRAY()                    
MySQL: NULL ON NULL by default
JSON_ARRAY(ABSENT ON NULL)      
JSON_ARRAY(NULL ON NULL)        
JSON_ARRAY(subquery)            
PostgreSQL: FORMAT JSON is not supported
JSON_OBJECTAGG, JSON_ARRAYAGG
JSON_OBJECTAGG()                
MySQL: k, v
JSON_ARRAYAGG()                 
MySQL: NULL ON NULL by default
RETURNING
JSON_CTOR(RETURNING type)       
Oracle: only VARCHAR2, BLOB, and CLOB supported
JSON_CTOR(RETURNING FORMAT)     
JSON_CTOR(ENCODING enc)         
FORMAT JSON
input FORMAT JSON               
Oracle: input JSON is not verified
IS JSON
IS [NOT] JSON                   
PostgreSQL: FORMAT JSON IS JSON not supported
Oracle: in WHERE only
MS SQL: ISJSON() function
MySQL: JSON_VALID() function
IS JSON type                    
JSON_EXISTS
JSON_EXISTS()                   
Oracle: only in WHERE or CASE
MySQL: JSON_CONTAINS_PATH()
JSON_EXISTS(ON ERROR)           
Oracle: UNKNOWN ON ERROR is not supported
JSON_VALUE()                    
MySQL: JSON_EXTRACT() is similar
JSON_VALUE(RETURNING)           
Oracle: only VARCHAR2, NUMBER, SDO_GEOMETRY
JSON_VALUE(ON ERROR/EMPTY)      
Oracle: ERROR ON EMPTY is not handled by ON ERROR, DEFAULT type should match RETURNING type
JSON_QUERY
JSON_QUERY()                    
MySQL: JSON_EXTRACT() is similar
JSON_QUERY(WITH WRAPPER)        
Oracle: scalars without wrapper not supported
JSON_QUERY(ON ERROR/EMPTY)      
JSON_TABLE
JSON_TABLE()                    
MySQL: column's PATH is required, type JSON instead of FORMAT JSON, EXISTS PATH extension
JSON_TABLE nested paths         
Oracle: nested path expressions should be disjunct
JSON_TABLE plans                
JSON path
JSON path basic accessors       
JSON path strict/lax            
Oracle, MySQL: lax only supported
JSON path filters               
Oracle: only one filter at the end and only in JSON_EXISTS
JSON path .*                    
JSON path [*]                   
JSON path [x, y]                
JSON path [x to y]              
JSON path [last]                
MySQL: only "[last]" or "[last - integer_const]" is supported
JSON path [expr]                
JSON path starts_with           
Oracle: only in filter in in JSON_EXISTS
JSON path like_regex            
Oracle: only in filter in in JSON_EXISTS, flags are not supported
JSON path item methods          
Oracle: only one method at the end of path, non-standard names
JSON path .datetime()           
Oracle: non-standard item method names, no datetime formats, can not return datetime type
JSON path arithmetic expressions
JSON path PASSING parameters    
Oracle: only in filter in JSON_EXISTS