Data types
INT
A 4-byte integer
- Range
-
-2147483648 .. 2147483647
- Aliases
-
INTEGER,SMALLINT,TINYINT,INT2,INT4. All these are 4-byte integer types. - Examples
SELECT CAST(12.3 AS INT); -- returns {"INT32":12}
CREATE TABLE type_test(intvalue INT);
UNSIGNED INT
A 4-byte unsigned integer
- Range
-
0 .. 4294967295
- Aliases
-
UNSIGNED INTEGER,UNSIGNED SMALLINT,UNSIGNED TINYINT,UNSIGNED INT2,UNSIGNED INT4,UINT,UINT2,UINT4 - Examples
SELECT CAST(12.3 AS UNSIGNED INT);
CREATE TABLE type_test(i UNSIGNED INT);
INSERT INTO type_test (i) VALUES (100);
SELECT *, TYPE(i) FROM type_test;
{"UNSIGNED INT":12}
{"_id":1,"i":100,"type":"UNSIGNED INT"}
BIGINT
An 8-byte integer
- Range
-
-9223372036854775807 .. 9223372036854775807
- Aliases
-
INT8 - Examples
SELECT CAST(12.3 AS BIGINT); -- returns {"INT64":12}
CREATE TABLE type_test(bigvalue BIGINT);
UNSIGNED BIGINT
An 8-byte unsigned integer.
- Range
-
0 .. 18446744073709551615
- Aliases
-
UNSIGNED INT8,UINT8 - Examples
CREATE TABLE type_test();
INSERT INTO type_test(x) VALUES(18446744073709551615);
SELECT x, TYPE(x) FROM type_test;
{"x":18446744073709551615,"type":"UNSIGNED BIGINT"}
DOUBLE
- Range
-
-1.79769313486231570e+308 .. 1.79769313486231570e+308
- Alias
-
FLOAT8 - Examples
SELECT CAST(12.40282e+14 AS DOUBLE);
CREATE TABLE type_test(dvalue DOUBLE);
FLOAT
- Range
-
-3.4028234663852e+38 .. 3.4028234663852e+38
- Aliases
-
FLOAT4andREAL - Examples
SELECT CAST(12.40282e+14 AS FLOAT);
CREATE TABLE type_test(fvalue FLOAT);
BOOL
- Range
-
trueorfalse
You do not need to quote these literals. It is possible to use uppercase, lowercase or mixed case literals.
SELECT CAST(12.40282e+14 as boolean); -- returns {"BOOL":true}
SELECT CAST(TRUE as boolean); -- returns {"BOOL":true}
SELECT CAST(FALSE as boolean); -- returns {"BOOL":false}
SELECT CAST(0 as boolean); -- returns {"BOOL":false}
SELECT CAST('false' as boolean); -- returns {"BOOL":false}
CREATE TABLE type_test(bvalue BOOL);
STRING
A variable-length character type.
- Length
-
Unlimited
- Aliases
-
BPCHAR,CHAR,VARCHAR,TEXT - Usage notes
-
You can use the
VARCHAR(N) syntax, but this is a compatibility feature only. Using N does not restrict the string size.
Only strings enclosed in single quotes are treated as string literals. Double quotes are used to construct delimited identifiers and JSON fields/values.
The standard way to include an apostrophe (') in a string literal is to escape it with another apostrophe.
In addition, Raijin also supports backslash (C-style) escaping, so the following queries are equivalent:
SELECT 'A string with an apostrophe '' inside';
SELECT 'A string with an apostrophe \' inside';
- Backslash (C-style) escaping
-
Raijin accepts "escape" string constants/delimited identifiers, an extension to the SQL standard. There are two ways to specify the escape string/identifier:
-
If the BackslashEscaping configuration parameter is turned on, you can use backslash escapes inside regular strings and quoted identifiers.
-
Else, use the extended prefix syntax by writing the
Echaracter in either upper or lowercase just before the opening single or double quote, e.g.,E’foo'ore"foo".
-
Within an escape string, the backslash character (\) defines the beginning of a C-like
escape sequence representing a special byte value, as shown in the following table.
| Backslash escape sequence | Interpretation |
|---|---|
|
Backspace |
|
Form feed |
|
Newline |
|
Carriage return |
|
Tab |
|
Octal byte value |
|
Hexadecimal byte value |
|
16 or 32-bit hexadecimal Unicode character value |
Any other character following a backslash is considered as a string literal.
Thus, to include a backslash character, write two backslashes (\\).
You can also escape a single quot by writing \' in addition to the standard ''; the same applies to double quotes in delimited identifiers, i.e., \" can be used instead of the standard "".
Raijn supports the 4-digit and the 8-digit forms of Unicode escape syntax to specify UTF-16 surrogate pairs to compose characters with code points larger than U+FFFF. However, the availability of the 8-digit form technically makes this unnecessary. Surrogate pairs are first combined into a single code point and then encoded in UTF-8.
The BackslashEscaping configuration parameter can be turned off.
In that case, the backslash character (\) is treated as a regular symbol and not the beginning of an escape sequence.
So, \' or \" will be treated as the end of a string literal or delimited identifier.
To include a quote in a regular string or identifier, duplicate the single '' or double "" quote accordingly.
SELECT SUBSTRING ('foo \'bar\'', 5, 5); (1)
SELECT '\U0001F431'; (2)
SELECT '\uD83D\uDC31';
CREATE TABLE type_test(str STRING); (3)
SELECT * FROM "\164ype_\x74est"; (4)
| 1 | Returns 'bar' |
| 2 | Returns a Unicode code point representation |
| 3 | Returns a Unicode surrogate pair representation |
| 4 | Executes SELECT * FROM type_test; |
(1)
SELECT SUBSTRING ('foo \'<bar\'', 5, 5); (2)
SELECT '\U0001F431'; (3)
SELECT '\uD83D\uDC31'; (4)
CREATE TABLE type_test(str STRING);
SELECT * FROM "\164ype_\x74est"; (5)
| 1 | This apostrophe (') will be treated as the end of the string |
| 2 | Error: syntax error at or near "bar" |
| 3 | Returns \U0001F431 |
| 4 | Returns \uD83D\uDC31 |
| 5 | Error: Table with name '\164ype_\x74est' does not exist |
See also String functions
TIMESTAMP
- Range
-
Any timestamp, starting from 1970-01-01 00:00:00 up to 3799-12-31 23:59:59.9999
- Aliases
-
DATETIME - Usage notes
-
Timestamp values are accepted in the following formats (ISO Date, rfc3339):
1977-09-06 01:02:03 1977-09-06 01:02:03.004 1977-09-06T01:02:03.004Z 1977-09-06T01:02:03.004+02:00 2011-5-29 0:3:21 2011-5-29 0:3:21+02:00 2011-5-29 0:3:21.004 2011-5-29 0:3:21.004+02:00
Nanosecond resolution is supported, but values are rounded to microseconds:
CREATE TABLE tbl(event_time TIMESTAMP);
INSERT INTO tbl (event_time) VALUES ('2022-10-29 18:46:26.946000999');
SELECT * FROM tbl;
-- yields the following (concrete value depends on a local timezone):
{"_id":1,"event_time":"2022-10-30T02:46:26.946001+08:00"}
You cannot cast TIMESTAMP to BOOL.
- Examples
SELECT CAST ('1970-02-03 22:14:39' as TIMESTAMP);
CREATE TABLE type_test(value TIMESTAMP);
- See also
VARIANT
A Variant is a special data type that can contain any type of data.
In contrast to other Raijin data types, queries cannot explicitly create fields using the VARIANT data type.
Instead, a field will show as VARIANT when data of different types is created without type declaration and inserted.
- Usage notes
-
Only numeric values are counted when using
VARIANTcolumns containing mixed data types in aggregation functions such as AVG, SUM, MIN, and MAX. Non-numeric values, such as STRING and TIMESTAMP, are consideredNULLand excluded.To include non-numeric values in aggregate calculations, you must explicitly typecast the column to the expected numeric data type. Non-numeric values that cannot be converted to the specified data type will result in a
NULLvalue and will not be included in the calculation. - Examples
CREATE TABLE type_test();
INSERT INTO type_test(x) VALUES (true), (false), (null), (5), (CAST(5 AS BIGINT)),
(CAST(1.23 AS DOUBLE)), (CAST('1970-02-03 22:14:39Z' as TIMESTAMP));
SELECT FIELDS FROM type_test;
CREATE TABLE sum_test();
INSERT INTO sum_test(x) VALUES (1), ('20');
SELECT SUM(x) from sum_test;
SELECT SUM(x::DOUBLE) from sum_test;
{"field":"x","type":"VARIANT"}
{"sum":1}
{"sum":21}