SQL compliance
Function | Description | Firebird | IBM DB2 | Oracle Database | Microsoft SQL | MySQL | PostgreSQL | SQLite | Apache Ignite |
---|---|---|---|---|---|---|---|---|---|
E011 | Numeric data types | Partial | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E011-01 | INTEGER and SMALLINT data types (including all spellings) | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E011-02 | REAL, DOUBLE PRECISION, and FLOAT data types | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E011-03 | DECIMAL and NUMERIC data types | Partial | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E011-04 | Arithmetic operators | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E011-05 | Numeric comparison | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E011-06 | Implicit casting among the numeric data types | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E021 | Character string types | Yes | Yes | Partial | Partial | Unknown | Partial | Unknown | Partial |
E021-01 | CHARACTER data type (including all its spellings) | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E021-02 | CHARACTER VARYING data type (including all its spellings) | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Partial |
E021-03 | Character literals | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E021-04 | CHARACTER_LENGTH function | Yes | Yes[note 1] | No | Unknown | Yes | Partial[note 2] | No | Yes |
E021-05 | OCTET_LENGTH function | Yes | Yes | No | Unknown | Yes | Yes | No[note 3] | Yes |
E021-06 | SUBSTRING function | Yes | Yes | No | Yes | Yes | Yes | No | Yes |
E021-07 | Character concatenation | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E021-08 | UPPER and LOWER functions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E021-09 | TRIM function | Yes | Yes | Yes | No[note 4][1] | Yes | Yes | Yes | Yes |
E021-10 | Implicit casting among the fixed-length and variable-length character string types | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E021-11 | POSITION function | Yes | Yes | No[note 5] | No[note 6][2] | Yes | Yes | No | Yes |
E021-12 | Character comparison | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E031 | Identifiers | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E031-01 | Delimited identifiers | Yes | Yes | Unknown | Unknown | Unknown | Yes | Unknown | Yes |
E031-02 | Lower case identifiers | Yes | Yes | Unknown | Unknown | Unknown | Yes | Unknown | Yes |
E031-03 | Trailing underscore | Yes | Yes | Unknown | Unknown | Unknown | Yes | Unknown | Yes |
E051 | Basic query specification | Partial | Yes | Partial | Unknown | Partial | Yes | Unknown | Partial |
E051-01 | SELECT DISTINCT | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E051-02 | GROUP BY clause | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Partial |
E051-04 | GROUP BY can contain columns not in <select-list> | Yes | Yes | Yes | Unknown | No | Yes | Unknown | Yes |
E051-05 | Select list items can be renamed | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes |
E051-06 | HAVING clause | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes |
E051-07 | Qualified * in select list | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E051-08 | Correlation names in the FROM clause | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E051-09 | Rename columns in the FROM clause | No | Yes | Unknown | Unknown | Unknown | Yes | Unknown | No |
E061 | Basic predicates and search conditions | Yes | Partial | Partial | Unknown | Unknown | Yes | Unknown | Partial |
E061-01 | Comparison predicate | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E061-02 | BETWEEN predicate | Yes | Yes | Partial | Yes | Yes | Yes | Unknown | Yes |
E061-03 | IN predicate with list of values | Yes | Yes | Partial | Yes | Yes | Yes | Unknown | Yes |
E061-04 | LIKE predicate | Yes | Yes | Partial | Yes | Yes | Yes | Unknown | Partial |
E061-05 | LIKE predicate: ESCAPE clause | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Partial |
E061-06 | NULL predicate | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E061-07 | Quantified comparison predicate | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Partial |
E061-08 | EXISTS predicate | Yes | Yes | Partial | Yes | Yes | Yes | Unknown | Yes |
E061-09 | Subqueries in comparison predicate | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E061-11 | Subqueries in IN predicate | Yes | Yes | Partial | Yes | Yes | Yes | Unknown | Yes |
E061-12 | Subqueries in quantified comparison predicate | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | No |
E061-13 | Correlated subqueries | Yes | Yes | Partial | Yes | Unknown | Yes | Unknown | Yes |
E061-14 | Search condition | Yes | Partial[note 7] | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E071 | Basic query expressions | Partial | Yes | Partial | Unknown | Unknown | Yes | Unknown | Yes |
E071-01 | UNION DISTINCT table operator | Yes | Yes[note 8] | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E071-02 | UNION ALL table operator | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes |
E071-03 | EXCEPT DISTINCT table operator | No | Yes[note 8] | No[note 9] | Unknown | Unknown | Yes | Unknown | Yes |
E071-05 | Columns combined via table operators need not have exactly the same data type | Yes | Yes | Yes | Yes | Unknown | Yes | Unknown | Yes |
E071-06 | Table operators in subqueries | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E081 | Basic Privileges | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | Unknown |
E081-01 | SELECT privilege at the table level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-02 | DELETE privilege | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-03 | INSERT privilege at the table level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-04 | UPDATE privilege at the table level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-05 | UPDATE privilege at the column level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-06 | REFERENCES privilege at the table level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-07 | REFERENCES privilege at the column level | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-08 | WITH GRANT OPTION | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E081-09 | USAGE privilege | Yes | Yes | No | Unknown | Unknown | Yes | Unknown | Unknown |
E081-10 | EXECUTE privilege | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E091 | Set functions | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E091-01 | AVG | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E091-02 | COUNT | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E091-03 | MAX | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E091-04 | MIN | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E091-05 | SUM | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E091-06 | ALL quantifier | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E091-07 | DISTINCT quantifier | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes |
E101 | Basic data manipulation | Yes | Yes | Yes | Unknown | Unknown | Yes | Partial | Partial |
E101-01 | INSERT statement | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Partial |
E101-03 | Searched UPDATE statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E101-04 | Searched DELETE statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E111 | Single row SELECT statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown |
E121 | Basic cursor support | Partial | Yes | Partial | Unknown | Unknown | Yes | Partial | No |
E121-01 | DECLARE CURSOR | Yes | Yes | Partial | Unknown | Unknown | Yes | No | No |
E121-02 | ORDER BY columns need not be in select list | Yes | Yes | Yes | Yes | Yes | Yes | Yes[note 10] | No |
E121-03 | Value expressions in ORDER BY clause | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | No |
E121-04 | OPEN statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E121-06 | Positioned UPDATE statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E121-07 | Positioned DELETE statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E121-08 | CLOSE statement | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E121-10 | FETCH statement: implicit NEXT | Yes | Yes | Partial | Unknown | Unknown | Yes | Unknown | No |
E121-17 | WITH HOLD cursors | No | Yes | Unknown | Unknown | Unknown | Yes | Unknown | No |
E131 | Null value support (nulls in lieu of values) | Yes | Yes | Unknown | Yes | Yes | Yes | Unknown | Yes |
E141 | Basic integrity constraints | Partial | Yes | Yes | Unknown | Unknown | Yes | Partial | Partial |
E141-01 | NOT NULL constraints | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E141-02 | UNIQUE constraints of NOT NULL columns | Yes | Yes | Yes | Unknown | Unknown | Yes | Yes | No |
E141-03 | PRIMARY KEY constraints | Yes | Yes | Yes | Yes | Yes | Yes | Yes[note 11] | Partial |
E141-04 | Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E141-06 | CHECK constraints | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E141-07 | Column defaults | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | No |
E141-08 | NOT NULL inferred on PRIMARY KEY | Yes | Yes | Yes | Unknown | Unknown | Yes | Partial[note 12] | Partial |
E141-10 | Names in a foreign key can be specified in any order | No | Yes | Yes | Unknown | Unknown | Yes | Unknown | No |
E151 | Transaction support | Partial | Partial | Yes | Yes | Unknown | Yes | Partial | No |
E151-01 | COMMIT statement | Yes | Yes | Yes | Yes | Unknown | Yes | Yes | No |
E151-02 | ROLLBACK statement | Yes | Yes | Yes | Yes | Unknown | Yes | Yes | No |
E152 | Basic SET TRANSACTION statement | Partial | Yes | Yes | Unknown | Unknown | Yes | No | No |
E152-01 | SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause | No | Partial[note 13] | Yes | Unknown | Unknown | Yes | Unknown | No |
E152-02 | SET TRANSACTION statement: READ ONLY and READ WRITE clauses | Yes | No | Yes | Unknown | Unknown | Yes | Unknown | No |
E* | Other | Partial | Partial | Partial | Unknown | Unknown | Partial | Unknown | Unknown |
E153 | Updatable queries with subqueries | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
E161 | SQL comments using leading double minus | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
E171 | SQLSTATE support | Partial | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
E182 | Host language binding (previously "Module Language") | No | Partial[note 14] | Unknown | Unknown | Unknown | No | Unknown | No |
F021 | Basic information schema | No | Partial | No | Yes | Yes[note 15] | Yes | No | No |
F021-01 | COLUMNS view | No | Partial[note 16] | No | Yes | Yes[note 17] | Yes | No[note 18] | No |
F021-02 | TABLES view | No | Partial[note 16] | No | Yes | Yes[note 17] | Yes | No[note 18] | No |
F021-03 | VIEWS view | No | Partial[note 16] | No | Yes | Yes[note 17] | Yes | No[note 18] | No |
F021-04 | TABLE_CONSTRAINTS view | No | Partial[note 16] | No | Yes | Yes | Yes | No | No |
F021-05 | REFERENTIAL_CONSTRAINTS view | No | Partial[note 16] | No | Yes | Yes | Yes | No | No |
F021-06 | CHECK_CONSTRAINTS view | No | Partial[note 16] | No | Yes | Yes | Yes | No | No |
F031 | Basic schema manipulation | Partial | Partial | Partial | Unknown | Unknown | Yes | Partial | Partial |
F031-01 | CREATE TABLE statement to create persistent base tables | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes |
F031-02 | CREATE VIEW statement | Yes | Yes | Yes | Yes | Unknown | Yes | Yes | No |
F031-03 | GRANT statement | Yes | Yes | Yes | Unknown | Unknown | Yes | No | No |
F031-04 | ALTER TABLE statement: ADD COLUMN clause | Yes | Yes | Unknown | Unknown | Yes | Yes | Unknown | Yes |
F031-13 | DROP TABLE statement: RESTRICT clause | Partial | Yes | No | Unknown | Unknown | Yes | Unknown | No |
F031-16 | DROP VIEW statement: RESTRICT clause | Unknown | Yes | No | Unknown | Unknown | Yes | Unknown | No |
F031-19 | REVOKE statement: RESTRICT clause | Partial | No | No | Unknown | Unknown | Yes | Unknown | No |
F041 | Basic joined table | Yes | Yes | Yes | Unknown | Unknown | Yes | Partial | Yes |
F041-01 | Inner join (but not necessarily the INNER keyword) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
F041-02 | INNER keyword | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
F041-03 | LEFT OUTER JOIN | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
F041-04 | RIGHT OUTER JOIN | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
F041-05 | Outer joins can be nested | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F041-07 | The inner table in a left or right outer join can also be used in an inner join | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F041-08 | All comparison operators are supported (rather than just =) | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F051 | Basic date and time | Partial | Partial | Yes | Unknown | Unknown | Yes | Partial | Partial |
F051-01 | DATE data type (including support of DATE literal) | Yes | Yes | Yes | Unknown | Yes | Yes | Unknown | Partial |
F051-02 | TIME data type (including support of TIME literal) with fractional seconds precision of at least 0 | Yes | Yes | No | Unknown | Unknown | Yes | Unknown | Partial |
F051-03 | TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Partial |
F051-04 | Comparison predicate on DATE, TIME, and TIMESTAMP data types | Yes | Yes | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F051-05 | Explicit CAST between datetime types and character string types | Yes | Yes | Yes | Unknown | Unknown | Yes | Partial | Yes |
F051-06 | CURRENT_DATE | Yes | Yes | Yes | Unknown | Yes | Yes | Yes | Yes |
F051-07 | LOCALTIME | Partial | No | No | Unknown | Yes | Yes | No | Yes |
F051-08 | LOCALTIMESTAMP | Partial | No | Yes | Unknown | Yes | Yes | No | Yes |
F081 | UNION and EXCEPT in views | Partial | Yes | Unknown | Yes | Unknown | Yes | Yes | No |
F131 | Grouped operations | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F131-01 | WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F131-02 | Multiple tables supported in queries with grouped views | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F131-03 | Set functions supported in queries with grouped views | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F131-04 | Subqueries with GROUP BY and HAVING clauses and grouped views | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F131-05 | Single row SELECT with GROUP BY and HAVING clauses and grouped views | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F* | Other | Partial | Unknown | Partial | Unknown | Unknown | Partial | Unknown | Partial |
F181 | Multiple module support | No | Unknown | Yes | Unknown | Unknown | No | Unknown | No |
F201 | CAST function | Yes | Unknown | Yes | Unknown | Yes | Yes | Yes | Yes |
F221 | Explicit defaults | No | Unknown | Unknown | Unknown | Unknown | Yes | Unknown | Yes |
F261 | CASE expression | Yes | Unknown | Yes | Yes | Yes | Yes | Unknown | Yes |
F261-01 | Simple CASE | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F261-02 | Searched CASE | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F261-03 | NULLIF | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F261-04 | COALESCE | Yes | Unknown | Yes | Yes | Yes | Yes | Unknown | Yes |
F311 | Schema definition statement | No | Unknown | Yes | Unknown | Unknown | Yes | Partial | No |
F311-01 | CREATE SCHEMA | No | Unknown | Yes | Unknown | Unknown | Yes | No | No |
F311-02 | CREATE TABLE for persistent base tables | No | Unknown | Yes | Yes | Yes | Yes | Unknown | No |
F311-03 | CREATE VIEW | No | Unknown | Yes | Yes | Yes | Yes | Yes | No |
F311-04 | CREATE VIEW: WITH CHECK OPTION | No | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
F311-05 | GRANT statement | No | Unknown | Yes | Unknown | Unknown | Yes | No | No |
F471 | Scalar subquery values | Yes | Unknown | Yes | Unknown | Unknown | Yes | Yes | Yes |
F481 | Expanded NULL predicate | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | Yes |
F501 | Features and conformance views | Unknown | Unknown | No | No | Unknown | Yes | Unknown | No |
F501-01 | SQL_FEATURES view | No | No | No | No | No | Yes | No | No |
F501-02 | SQL_SIZING view | Unknown | Unknown | No | No | Unknown | Yes | No | No |
F501-03 | SQL_LANGUAGES view | Unknown | Unknown | No | No | Unknown | Yes | No | No |
F812 | Basic flagging | No | Unknown | SQL-92 | Unknown | Unknown | No | Unknown | No |
S011 | Distinct data types | No | Unknown | Unknown | Unknown | Unknown | No | Unknown | No |
S011-01 | USER_DEFINED_TYPES view | Unknown | Unknown | Unknown | Unknown | Unknown | No | Unknown | No |
T321 | Basic SQL-invoked routines | Partial | Unknown | Partial | Unknown | Unknown | Partial | Unknown | No |
T321-01 | User-defined functions with no overloading | Yes | Unknown | Unknown | Yes | Yes | Yes | Unknown | No |
T321-02 | User-defined stored procedures with no overloading | Yes | Unknown | Unknown | Yes | Unknown | Yes | Unknown | No |
T321-03 | Function invocation | Yes | Unknown | Yes | Yes | Yes | Yes | Unknown | No |
T321-04 | CALL statement | Partial | Unknown | Yes | Unknown | Unknown | Yes | No | No |
T321-05 | RETURN statement | Partial | Unknown | Partial[note 19] | Unknown | Unknown | No | No | No |
T321-06 | ROUTINES view | Unknown | Unknown | No[note 20] | Unknown | Unknown | Yes | Unknown | No |
T321-07 | PARAMETERS view | Unknown | Unknown | No[note 21] | Unknown | Unknown | Yes | Unknown | No |
T631 | IN predicate with one list element | Yes | Unknown | Yes | Unknown | Unknown | Yes | Unknown | No |
Footnotes
- Without USING keyword (but with unit argument); LENGTH function has optional unit argument
- Trims trailing spaces from CHARACTER values before counting
- There is no built-in function by this name, although the number of octets in a string can be determined by using LENGTH(CAST(X AS BLOB)).
- There are LTRIM and RTRIM functions for equivalent functionality.
- There is INSTR.
- There is the CHARINDEX function for equivalent functionality.
- Lacks support for [IS [NOT] TRUE|FALSE|UNKNOWN]
- Without DISTINCT keyword
- Use MINUS instead of EXCEPT DISTINCT
- Except compound queries.
- Only WITHOUT ROWID tables have real primary keys other than the rowid (INTEGER PRIMARY KEY)
- Only for WITHOUT ROWID tables.
- SET [CURRENT] ISOLATION used instead of SET TRANSACTION
- Supports embedded language features but not the specific MODULE syntax
- https://dev.mysql.com/doc/refman/5.7/en/information-schema.html
- Included in SYSIBM schema
- Also includes MySQL-specific extension columns
- You can use PRAGMA for obtaining this information, and can create an information schema based on this, but it is not build in.
- Oracle supports the following subfeature in PL/SQL but not in Oracle SQL.
- Use the
ALL PROCEDURES
metadata view. - Use the
ALL_ARGUMENTS
andALL_METHOD_PARAMS
metadata views.
gollark: !q take 15 fuel <@!258639553357676545>
gollark: !give 250 fuel <@!258639553357676545>
gollark: !roll d6
gollark: !give 20 clay <@!258639553357676545>
gollark: !roll d6
References
- Oracle Compliance to Core SQL
- Firebird: SQL Conformance
- PostgreSQL: Documentation: 12: D.1. Supported Features
- "[MS-TSQLISO02]: E021-09, TRIM function". docs.microsoft.com. Retrieved 22 April 2020.
- "[MS-TSQLISO02]: E021-11, POSITION function". docs.microsoft.com. Retrieved 22 April 2020.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.