All Products
Search
Document Center

ApsaraDB RDS:Kompatibilitas instansi analitik DuckDB

Last Updated:Nov 11, 2025

Topik ini menjelaskan kompatibilitas instansi ApsaraDB RDS for MySQL yang menggunakan mesin analitik DuckDB.

Tipe data yang didukung

Tipe

Tipe data MySQL

Catatan kompatibilitas

Tipe numerik

BOOLEAN

Kompatibel

TINYINT, TINYINT UNSIGNED

Kompatibel

SMALLINT, SMALLINT UNSIGNED

Kompatibel

INT, INTEGER, INT UNSIGNED, INTEGER UNSIGNED

Kompatibel

BIGINT, BIGINT UNSIGNED

Kompatibel

FLOAT

Kompatibel

DOUBLE

Kompatibel

DECIMAL(m,d)

m adalah presisi maksimum dari nilai numerik. Jika m<=38, tipe ini sepenuhnya kompatibel. Jika m>38, data dikonversi ke tipe DOUBLE untuk penyimpanan, yang dapat menyebabkan kehilangan presisi.

Tipe karakter

CHAR, VARCHAR

Hanya set karakter UTF-8 dan aturan pengurutan yang didukung.

TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT

Kompatibel

JSON

Kompatibel

SET

Kompatibel

ENUM

Kompatibel

Tipe karakter biner

BINARY, VARBINARY

Kompatibel

BIT

Kompatibel

TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB

Kompatibel

Tipe waktu

YEAR

Kompatibel

TIME

Instansi analitik DuckDB mendukung rentang dari '00:00:00' hingga '23:59:59' dalam format `'HH:MM:SS'`.

MySQL, di sisi lain, mendukung rentang '-838:59:59'~'838:59:59'. Karena perbedaan rentang nilai ini, hasil kueri mungkin tidak konsisten jika data berada di luar rentang yang didukung oleh instansi analitik DuckDB.

DATE

Instansi analitik DuckDB mendukung rentang dari '0001-01-01' hingga '9999-12-31' dalam format 'YYYY-MM-DD'.

MySQL mendukung rentang dari '0000-00-00' hingga '0001-01-01'. Karena rentang yang didukung berbeda, data di luar rentang instansi analitik DuckDB dapat menyebabkan hasil kueri yang tidak konsisten.

DATETIME

Instansi analitik DuckDB mendukung rentang dari '0001-01-01 00:00:00.000000' UTC hingga '9999-12-31 00:00:00.999999' UTC dalam format 'YYYY-MM-DD HH:MM:SS.MS'.

MySQL mendukung rentang dari '0000-00-00 00:00:00' hingga '0001-01-01 00:00:00'. Karena rentang yang didukung berbeda, data di luar rentang instansi analitik DuckDB dapat menyebabkan hasil kueri yang tidak konsisten.

TIMESTAMP

Kompatibel

Tipe data spasial

GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION

Tidak kompatibel

Batasan pernyataan SELECT

  • Komentar

    Komentar yang diawali dengan # tidak didukung. Contohnya:

    SELECT * FROM t1 #comment;
    ;
  • Konversi Set Karakter

    Konversi set karakter dalam bentuk apa pun tidak didukung, terlepas dari apakah set karakter tujuan didukung atau tidak. Contohnya:

    SELECT convert(id using gbk) FROM t1;
    SELECT cast(id AS CHAR CHARACTER SET utf8mb4) FROM t1;
  • Sintaks JOIN

    Penggunaan JOIN eksplisit dan implisit dalam pernyataan SQL yang sama tidak didukung. Contohnya:

    SELECT * FROM t1 JOIN (t2, t3);
  • Unit interval

    Unit interval berikut tidak didukung.

    YEAR_MONTH, DAY_HOUR, HOUR_MINUTE, DAY_MINUTE, HOUR_SECOND, DAY_SECOND, SECOND_MICROSECOND, HOUR_MICROSECOND, DAY_MICROSECOND, MINUTE_SECOND, MINUTE_MICROSECOND, SQL_TSI_HOUR
  • Ekspresi interval

    Dalam ekspresi `Interval expr unit`, jika `expr` merupakan ekspresi non-konstan, Anda harus mengapitnya dengan tanda kurung untuk menentukan cakupannya. Contohnya:

    # Pernyataan SQL berikut tidak didukung.
    SELECT '2018-12-31 23:59:59' + INTERVAL -1 SECOND; 
    # Tulis ulang pernyataan sebagai berikut:
    SELECT '2018-12-31 23:59:59' + INTERVAL (-1) SECOND; 
  • Definisi alias

    • Sintaks alias expr 'alias' dan expr "alias" tidak didukung. Contohnya:

      # Tidak didukung
      SELECT 1 '1';
      SELECT 1 "1";
      # Anda dapat menulis ulang pernyataan sebagai berikut:
      SELECT 1 AS '1';
      SELECT 1 AS "1";
      SELECT 1 AS `1`;
      SELECT 1 `1`;
      # Pernyataan SQL di atas setara.
    • Jika alias merupakan kata kunci, Anda harus menggunakan `AS` atau tanda backtick. Contohnya:

      SELECT id time FROM t1;
      
      # Tulis ulang pernyataan sebagai salah satu berikut:
      SELECT id AS time FROM t1;
      SELECT id `time` FROM t1;
      SELECT id AS `time` FROM t1;
      SELECT id AS 'time' FROM t1;
      SELECT id AS "time" FROM t1;
  • Subquery

    Perbandingan kesetaraan dengan subkueri non-skalar tidak didukung. Contohnya:

    SELECT * FROM t1 WHERE (id, col1) = (SELECT id, col1 FROM t1);
  • Konversi Tipe Data

    Konversi eksplisit ke tipe data BINARY(num), SIGNED, atau UNSIGNED tidak didukung. Contohnya:

    SELECT CAST('abc' AS binary(1));
    SELECT CAST(1 AS SIGNED);
    SELECT CAST(1 AS UNSIGNED);
  • Pengubah Kolom

    Pengubah `Binary` untuk nama kolom tidak didukung. Contohnya:

    SELECT binary id FROM t1;
  • Ekspresi aritmetika kompleks

    Untuk ekspresi aritmetika kompleks, gunakan tanda kurung untuk menentukan urutan operasi dan mencegah kesalahan penguraian.

    # Simbol (!=-) tidak dapat diurai dengan benar dalam instansi analitik DuckDB.
    SELECT 1 !=-1;
    # Kami menyarankan Anda menulis ulang pernyataan sebagai berikut:
    SELECT 1 != (-1);
    
    # Simbol (--) tidak dapat diurai dengan benar dalam instansi analitik DuckDB.
    SELECT --1;
    # Kami menyarankan Anda menulis ulang pernyataan sebagai berikut:
    SELECT -(-1);

Masalah konversi tipe

Untuk memastikan efisiensi eksekusi, instansi analitik DuckDB menggunakan sistem tipe yang ketat. Selama eksekusi kueri, sistem secara otomatis melakukan konversi tipe berdasarkan konteks—proses ini disebut konversi tipe implisit. Pada skenario di mana konversi implisit tidak memungkinkan, Anda harus menggunakan fungsi CAST atau CONVERT untuk secara eksplisit menentukan konversi tipe, sehingga kueri dapat dieksekusi dengan benar.

Aturan konversi tipe implisit dalam fungsi

Catatan
  • Simbol `/` menunjukkan bahwa tidak ada konversi implisit yang terlibat. Simbol `✔️` menunjukkan bahwa konversi implisit didukung. Simbol `✖️` menunjukkan bahwa konversi implisit tidak didukung.

  • Tipe string biasa mengacu pada tipe MySQL CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, JSON, SET, dan ENUM.

  • Tipe string biner mengacu pada tipe MySQL BINARY, VARBINARY, BIT, TINYBLOB, BLOB, MEDIUMBLOB, dan LONGBLOB.

  • Mengonversi tipe integer dengan rentang lebih besar ke tipe integer dengan rentang lebih kecil tidak didukung.

Konversi ke tipe skalar dasar

Tipe sumber

Konversi implisit ke tipe skalar dasar

Literal string

Literal numerik

Skalar dasar

Literal string

/

✖️

Literal numerik

✖️

/

Numerik

BOOLEAN

✖️

✖️

Tipe integer

✖️

✖️

FLOAT

✖️

✖️

DOUBLE

✖️

✖️

DECIMAL

✖️

✖️

String

String reguler

✖️

✖️

String biner

✖️

✖️

Tanggal dan waktu

YEAR

✖️

✖️

DATE

✖️

✖️

TIME

✖️

✖️

DATETIME

✖️

✖️

TIMESTAMP

✖️

✖️

Konversi ke tipe numerik

Tipe sumber

Konversi implisit ke tipe numerik

BOOLEAN

Tipe integer

FLOAT

DOUBLE

DECIMAL

Skalar dasar

String literal

✖️

✖️

✖️

✔️

✖️

Literal numerik

✖️

✔️

✔️

✔️

✔️

Numerik

BOOLEAN

/

✖️

✖️

✖️

✖️

Tipe integer

✖️

/

✔️

✔️

✔️

FLOAT

✖️

✔️: Hanya mendukung konversi ke BIGINT.

/

✔️

✖️

DOUBLE

✖️

✔️: Hanya mendukung konversi ke BIGINT.

✖️

/

✖️

DECIMAL

✖️

✔️

✔️

✔️

/

String

String reguler

✖️

✖️

✖️

✔️

✖️

String biner

✖️

✖️

✖️

✖️

✖️

Tanggal dan waktu

YEAR

✖️

✔️

✔️

✔️

✔️

DATE

✖️

✖️

✖️

✔️

✖️

TIME

✖️

✖️

✖️

✔️

✖️

DATETIME

✖️

✖️

✖️

✔️

✖️

TIMESTAMP

✖️

✖️

✖️

✔️

✖️

Konversi ke tipe string

Tipe sumber

Konversi implisit ke tipe string

String biasa

String biner

Skalar dasar

String literal

✔️

✖️

Literal numerik

✖️

✖️

Numerik

BOOLEAN

✖️

✖️

Tipe integer

✔️

✖️

FLOAT

✔️

✖️

DOUBLE

✔️

✖️

DECIMAL

✔️

✖️

String

String reguler

/

✖️

String biner

✖️

/

Tanggal dan waktu

YEAR

✔️

✖️

DATE

✔️

✖️

TIME

✔️

✖️

DATETIME

✔️

✖️

TIMESTAMP

✔️

✖️

Konversi ke tipe tanggal dan waktu

Tipe sumber

Konversi implisit ke tipe tanggal dan waktu

YEAR

DATE

TIME

DATETIME

TIMESTAMP

Skalar dasar

String literal

✖️

✖️

✖️

✖️

✖️

Literal numerik

✔️

✖️

✖️

✖️

✖️

Numerik

BOOLEAN

✖️

✖️

✖️

✖️

✖️

Tipe integer

✖️

✖️

✖️

✖️

✖️

FLOAT

✖️

✖️

✖️

✖️

✖️

DOUBLE

✖️

✖️

✖️

✖️

✖️

DECIMAL

✖️

✖️

✖️

✖️

✖️

String

String reguler

✖️

✖️

✖️

✖️

✖️

String biner

✖️

✖️

✖️

✖️

✖️

Tanggal dan waktu

YEAR

/

✖️

✖️

✖️

✖️

DATE

✖️

/

✖️

✔️

✔️

TIME

✖️

✖️

/

✔️

✔️

DATETIME

✖️

✖️

✖️

/

✔️

TIMESTAMP

✖️

✖️

✖️

✔️

/

Aturan konversi implisit untuk perbandingan

Instansi analitik DuckDB memiliki aturan yang lebih ketat dan konsisten untuk konversi dan perbandingan tipe. Namun, perilakunya mungkin berbeda dari MySQL dalam beberapa skenario, sebagai berikut:

  • Konversi implisit dari string ke tanggal: Saat string dikonversi secara implisit ke tanggal, kueri SQL gagal dan mengembalikan kesalahan jika format string tidak dapat diurai menjadi nilai tanggal yang valid.

  • Aturan perbandingan antar tipe integer: Saat tipe integer yang berbeda dibandingkan, instansi analitik DuckDB mengonversinya ke tipe integer dengan rentang nilai yang lebih besar.

  • Urutan konversi tipe untuk ekspresi multi-elemen: Untuk ekspresi multi-elemen seperti col1 IN (col2, col3, col4, ...), col1 BETWEEN col2 AND col3, dan coalesce(col1, col2, col3, ...), konversi tipe dilakukan secara berurutan.

  • Perbedaan kompatibilitas untuk tipe YEAR: Dalam instansi analitik DuckDB, tipe YEAR dikonversi ke tipe INTEGER untuk perbandingan. Perilaku ini dapat menyebabkan ketidakkompatibilitas dengan MySQL. Contohnya:

    CREATE TABLE t1 (id YEAR PRIMARY KEY);
    INSERT INTO t1 VALUES (1980);
    SELECT * FROM t1 WHERE id BETWEEN 70 AND 90;
    
    # Hasil kueri MySQL
    +------+
    | id   |
    +------+
    | 1980 |
    +------+
    
    # Hasil kueri instansi analitik DuckDB
    Empty set.
  • Aturan konversi string untuk tipe Boolean: Instansi analitik DuckDB mendukung konversi string '1', '0', 'yes', 'no', 'true', dan 'false' ke tipe BOOLEAN. Upaya mengonversi string lainnya mengembalikan kesalahan. Sebaliknya, MySQL mengonversi '1' ke true dan semua string lainnya ke false. Oleh karena itu, pernyataan SQL berikut dapat menghasilkan hasil yang tidak konsisten:

    CREATE TABLE t1 (id INT PRIMARY KEY);
    INSERT INTO t1 VALUES (1);
    SELECT id FROM t1 WHERE 'true';
    
    # Hasil kueri MySQL
    Empty set
    
    # Hasil kueri instansi analitik DuckDB
    +------+
    | id   |
    +------+
    |    1 |
    +------+

Catatan
  • Saat data dengan tipe berbeda dibandingkan, sistem mengonversi data ke tipe yang sama sesuai dengan aturan dalam tabel berikut sebelum melakukan perbandingan. Untuk perbandingan yang tidak didukung (✖️), kesalahan dikembalikan.

  • Tipe string biasa mengacu pada tipe MySQL CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, JSON, SET, dan ENUM.

  • Tipe string biner mengacu pada tipe MySQL BINARY, VARBINARY, BIT, TINYBLOB, BLOB, MEDIUMBLOB, dan LONGBLOB.

Perbandingan dengan tipe skalar dasar

Tipe sumber

Perbandingan dengan tipe skalar dasar

String literal

Literal numerik

Skalar dasar

String literal

String

Literal numerik

Literal numerik

Literal numerik

Tipe numerik dengan rentang lebih besar

Numerik

BOOLEAN

BOOLEAN

Tipe numerik dengan rentang lebih besar

Tipe integer

Tipe integer

Tipe numerik dengan rentang lebih besar

FLOAT

FLOAT

Tipe numerik dengan rentang lebih besar

DOUBLE

DOUBLE

Tipe numerik dengan rentang lebih besar

DECIMAL

DECIMAL

Tipe numerik dengan rentang lebih besar

String

String reguler

String reguler

Literal numerik

String biner

String biner

✖️

Tanggal dan waktu

YEAR

YEAR

Tipe numerik dengan rentang lebih besar

DATE

DATETIME

✖️

TIME

TIME

✖️

DATETIME

DATETIME

✖️

TIMESTAMP

TIMESTAMP

✖️

Perbandingan dengan tipe numerik

Tipe sumber

Perbandingan dengan tipe numerik

BOOLEAN

Tipe integer

FLOAT

DOUBLE

DECIMAL

Skalar dasar

Literal string

BOOLEAN

Tipe integer

FLOAT

DOUBLE

DECIMAL

Literal numerik

Tipe numerik dengan rentang lebih besar

Tipe numerik dengan rentang lebih besar

Tipe numerik dengan rentang lebih besar

Tipe numerik dengan rentang lebih besar

Tipe numerik dengan rentang lebih besar

Numerik

BOOLEAN

BOOLEAN

Tipe integer

FLOAT (Perbandingan ketidaksamaan ✖️)

DOUBLE (Perbandingan ketidaksamaan ✖️)

DECIMAL (Perbandingan ketidaksamaan ✖️)

Tipe integer

Tipe integer

Tipe integer

FLOAT

DOUBLE

DECIMAL

FLOAT

FLOAT (Perbandingan ketidaksamaan ✖️)

FLOAT

FLOAT

DOUBLE

FLOAT

DOUBLE

DOUBLE (Perbandingan ketidaksamaan ✖️)

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DECIMAL

DECIMAL (Perbandingan ketidaksamaan ✖️)

DECIMAL

FLOAT

DOUBLE

DECIMAL

String

String reguler

BOOLEAN

Tipe integer

FLOAT

DOUBLE

DECIMAL

String biner

✖️

✖️

✖️

✖️

✖️

Tanggal dan waktu

YEAR

INTEGER

Tipe integer dengan rentang lebih besar

FLOAT

DOUBLE

DECIMAL

DATE

✖️

✖️

✖️

DOUBLE

✖️

TIME

✖️

✖️

✖️

DOUBLE

✖️

DATETIME

✖️

✖️

✖️

DOUBLE

✖️

TIMESTAMP

✖️

✖️

✖️

DOUBLE

✖️

Perbandingan dengan tipe string

Tipe sumber

Perbandingan dengan tipe string

String reguler

String biner

Skalar dasar

String literal

String reguler

String biner

Literal numerik

Literal numerik

✖️

Numerik

BOOLEAN

BOOLEAN

✖️

Tipe integer

Tipe integer

✖️

FLOAT

FLOAT

✖️

DOUBLE

DOUBLE

✖️

DECIMAL

DECIMAL

✖️

String

String reguler

String reguler

String biner

String biner

String biner

String biner

Tanggal dan waktu

YEAR

INTEGER

✖️

DATE

DATE

✖️

TIME

TIME

✖️

DATETIME

DATETIME

✖️

TIMESTAMP

TIMESTAMP

✖️

Perbandingan dengan tipe tanggal dan waktu

Tipe sumber

Perbandingan dengan tipe tanggal dan waktu

YEAR

DATE

TIME

DATETIME

TIMESTAMP

Skalar dasar

Literal string

YEAR

DATETIME

TIME

DATETIME

TIMESTAMP

Literal numerik

Tipe numerik dengan rentang lebih besar

✖️

✖️

✖️

✖️

Numerik

BOOLEAN

INTEGER

✖️

✖️

✖️

✖️

Tipe integer

Tipe integer dengan rentang lebih besar

✖️

✖️

✖️

✖️

FLOAT

FLOAT

✖️

✖️

✖️

✖️

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DOUBLE

DECIMAL

DECIMAL

✖️

✖️

✖️

✖️

String

String reguler

INTEGER

DATE

TIME

DATETIME

TIMESTAMP

String biner

✖️

✖️

✖️

✖️

✖️

Tanggal dan waktu

YEAR

INTEGER

✖️

✖️

✖️

✖️

DATE

✖️

DATE

✖️

DATETIME

TIMESTAMP

TIME

✖️

✖️

TIME

✖️

✖️

DATETIME

✖️

DATETIME

✖️

DATETIME

DATETIME

TIMESTAMP

✖️

TIMESTAMP

✖️

DATETIME

TIMESTAMP

Potensi ketidaksesuaian dalam hasil kueri

Operasi numerik

  • Terdapat ketidakkompatibilitas dalam perbandingan bilangan titik mengambang. Contohnya:

    CREATE TABLE t1 (id FLOAT PRIMARY KEY);
    INSERT INTO t1 VALUES (1.22), (1.23), (1.24);
    SELECT * FROM t1 WHERE t1.id > 1.23;
    
    # Hasil kueri MySQL
    +------+
    | id   |
    +------+
    | 1.23 |
    | 1.24 |
    +------+
    
    # Hasil kueri instansi analitik DuckDB
    +------+
    | id   |
    +------+
    | 1.24 |
    +------+
  • Hasil operasi majemuk kompleks pada bilangan titik mengambang mungkin tidak konsisten karena kesalahan titik mengambang.

  • Saat Anda melakukan operasi antara tipe integer dan DECIMAL, hasilnya tidak boleh melebihi rentang nilai tipe tersebut. Jika tidak, overflow dapat menyebabkan eksekusi gagal.

    CREATE TABLE t1 (id TINYINT PRIMARY KEY);
    INSERT INTO t1 VALUES (100);
    SELECT id * 2 FROM t1;
    
    # Hasil kueri MySQL
    +--------+
    | id * 2 |
    +--------+
    |    200 |
    +--------+
    
    # Hasil kueri instansi analitik DuckDB
    ERROR 7577 (HY000): [DuckDB] Out of Range Error: Overflow in multiplication of INT8 (100 * 2)!.

Ketidakkonsistenan yang disebabkan oleh aturan pengurutan

Aturan pengurutan dalam seri utf8mb4_0900_xx tidak kompatibel saat membandingkan beberapa karakter simbol. Contohnya:

CREATE TABLE t1 ( id varchar(20) COLLATE utf8mb4_0900_ai_ci PRIMARY KEY );
INSERT INTO t1 VALUES ('!'), ('_');
SELECT * FROM t1 ORDER BY id;

# Hasil kueri MySQL
+----+
| id |
+----+
| _  |
| !  |
+----+

# Hasil kueri instansi analitik DuckDB
+----+
| id |
+----+
| !  |
| _  |
+----+

Penanganan nilai NULL dalam subquery vektor dengan IN

Dalam instansi analitik DuckDB, terdapat ketidakkompatibilitas dalam cara subkueri vektor dengan `IN` menangani nilai NULL. Contohnya:

CREATE TABLE t1 (id INT PRIMARY KEY, col1 INT);
INSERT INTO t1 VALUES (1, 1), (2, 2);
CREATE TABLE t2 (id INT PRIMARY KEY, col1 INT);
INSERT INTO t2 VALUES (1, NULL);

select (id, col1) in (select id, col1 from t2) from t1;

# Hasil kueri MySQL
+-----------------------------------------+
| (id, col1) in (select id, col1 from t2) |
+-----------------------------------------+
|                                    NULL |
|                                       0 |
+-----------------------------------------+

# Hasil kueri instansi analitik DuckDB
+-----------------------------------------+
| (id, col1) in (select id, col1 from t2) |
+-----------------------------------------+
|                                    NULL |
|                                    NULL |
+-----------------------------------------+

Untuk data (2, 2), tidak ada awalan vektor yang cocok setelah `IN`. MySQL mengembalikan 0, sedangkan instansi analitik DuckDB mengembalikan NULL.

Batasan fungsi

Fungsi agregat

Nama fungsi

Didukung

Batasan

AVG

Ya

Tidak ada batasan

BIT_AND

Ya

Tipe string, DECIMAL, dan tanggal tidak didukung.

BIT_OR

Ya

Tipe string, DECIMAL, dan tanggal tidak didukung.

BIT_XOR

Ya

Tipe string, DECIMAL, dan tanggal tidak didukung.

COUNT

Ya

Tidak ada batasan

COUNT(DISTINCT)

Ya

Tidak ada batasan

GROUP_CONCAT

Ya

GROUP_CONCAT multi-kolom dan SEPARATOR tidak didukung.

JSON_ARRAYAGG

Tidak

Tidak berlaku

JSON_OBJECTAGG

Tidak

Tidak berlaku

MAX

Ya

Tidak ada batasan

MIN

Ya

Tidak ada batasan

STD

Ya

Tidak ada batasan

STDDEV

Ya

Tidak ada batasan

STDDEV_POP

Ya

Tidak ada batasan

STDDEV_SAMP

Ya

Tidak ada batasan

SUM

Ya

Tidak ada batasan

VAR_POP

Ya

Tidak ada batasan

VAR_SAMP

Ya

Tidak ada batasan

VARIANCE

Ya

Tidak ada batasan

Fungsi numerik

Fungsi numerik tidak mendukung tipe BOOLEAN.

Nama fungsi

Didukung

Batasan

%

Ya

Tidak ada batasan

MOD

Ya

Tidak ada batasan

*

Ya

Tidak ada batasan

+

Ya

Tidak ada batasan

-

Ya

Tidak ada batasan

/

Ya

Tidak ada batasan

ABS()

Ya

Tidak ada batasan

ACOS()

Ya

Tidak ada batasan

ASIN()

Ya

Tidak ada batasan

ATAN()

Ya

ATAN(y, x) tidak didukung.

ATAN2()

Tidak

Tidak berlaku

CEIL()

Ya

Tidak ada batasan

CEILING()

Ya

Tidak ada batasan

CONV()

Tidak

Tidak berlaku

COS()

Ya

Tidak ada batasan

COT()

Ya

Tidak ada batasan

CRC32()

Tidak

Tidak berlaku

DEGREES()

Ya

Tidak ada batasan

DIV

Ya

Tidak ada batasan

EXP()

Ya

Tidak ada batasan

FLOOR()

Ya

Tidak ada batasan

LN()

Ya

Tidak ada batasan

LOG()

Ya

Tidak ada batasan

LOG10()

Ya

Tidak ada batasan

LOG2()

Ya

Tidak ada batasan

MOD()

Ya

Tidak ada batasan

PI()

Ya

Tidak ada batasan

POW()

Ya

Tidak ada batasan

POWER()

Ya

Tidak ada batasan

RADIANS()

Ya

Tidak ada batasan

RAND()

Ya

Tidak ada batasan

ROUND()

Ya

Tidak ada batasan

SIGN()

Ya

Tidak ada batasan

SIN()

Ya

Tidak ada batasan

SQRT()

Ya

Tidak ada batasan

TAN()

Ya

Tidak ada batasan

TRUNCATE()

Tidak

Tidak berlaku

Fungsi string

Instansi analitik DuckDB secara ketat membedakan antara string biner, seperti BLOB dan VARBINARY, dengan string biasa, seperti VARCHAR, TEXT, dan JSON. Oleh karena itu, fungsi string berikut hanya menerima string biasa sebagai input, bukan string biner. Untuk fungsi yang dapat menerima string biner, catatan khusus disediakan.

Nama fungsi

Didukung

Batasan

ASCII()

Ya

Tidak ada batasan

BIN()

Ya

Di MySQL, BIN('') mengembalikan NULL. Di instansi analitik DuckDB, mengembalikan '0'.

BIT_LENGTH()

Ya

Tidak ada batasan

CHAR()

Tidak

Tidak berlaku

CHAR_LENGTH()

Ya

Tidak ada batasan

CHARACTER_LENGTH()

Ya

Tidak ada batasan

CONCAT()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

CONCAT_WS()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

ELT()

Tidak

Tidak berlaku

EXPORT_SET()

Tidak

Tidak berlaku

FIELD()

Tidak

Tidak berlaku

FIND_IN_SET()

Ya

Parameter pertama fungsi ini harus berupa tipe karakter. Tipe non-karakter dapat menghasilkan hasil yang tidak konsisten dengan MySQL.

FORMAT()

Tidak

Tidak berlaku

FROM_BASE64()

Ya

Fungsi ini menggunakan aturan decoding Base64. Jika decoding gagal, kesalahan dikembalikan.

HEX()

Ya

Tidak ada batasan

INSERT()

Ya

Tidak ada batasan

INSTR()

Ya

Tidak ada batasan

LCASE()

Ya

Tidak ada batasan

LEFT()

Ya

Tidak ada batasan

LENGTH()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

LIKE

Ya

`LIKE` tidak dipengaruhi oleh aturan pengurutan.

LOAD_FILE()

Tidak

Tidak berlaku

LOCATE()

Ya

Tidak ada batasan

LOWER()

Ya

Tidak ada batasan

LPAD()

Ya

Tidak ada batasan

LTRIM()

Ya

Tidak ada batasan

MAKE_SET()

Tidak

Tidak berlaku

MATCH()

Tidak

Tidak berlaku

MID()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

NOT LIKE

Ya

Fungsi NOT LIKE tidak terpengaruh oleh aturan pengurutan.

NOT REGEXP

Tidak

Tidak berlaku

OCT()

Ya

Di MySQL, OCT('') mengembalikan NULL. Di instansi analitik DuckDB, mengembalikan '0'.

OCTET_LENGTH()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

ORD()

Ya

Tidak ada batasan

POSITION()

Ya

Tidak ada batasan

QUOTE()

Tidak

Tidak berlaku

REGEXP

Tidak

Tidak berlaku

REGEXP_INSTR()

Tidak

Tidak berlaku

REGEXP_LIKE()

Tidak

Tidak berlaku

REGEXP_REPLACE()

Tidak

Tidak berlaku

REGEXP_SUBSTR()

Tidak

Tidak berlaku

REPEAT()

Ya: Dapat menerima string biner sebagai input.

Tidak ada batasan

REPLACE()

Ya

Tidak ada batasan

REVERSE()

Ya

Tidak ada batasan

RIGHT()

Ya

Tidak ada batasan

RLIKE

Tidak

Tidak berlaku

RPAD()

Ya

Tidak ada batasan

RTRIM()

Ya

Tidak ada batasan

SOUNDEX()

Tidak

Tidak berlaku

SOUNDEX LIKE

Tidak

Tidak berlaku

SPACE()

Ya

Tidak ada batasan

STRCMP()

Ya

Tidak ada batasan

SUBSTR()

Ya

Sintaks SUBSTR(str FROM pos) dan SUBSTR(str FROM pos FOR len) tidak didukung.

SUBSTRING()

Ya

Sintaks SUBSTRING(str FROM pos) dan SUBSTRING(str FROM pos FOR len) tidak didukung.

SUBSTRING_INDEX()

Ya

Tidak ada batasan

TO_BASE64()

Ya: Dapat menerima string biner sebagai input.

Fungsi ini mengembalikan string biner.

TRIM()

Ya

Tidak ada batasan

UCASE()

Ya

Tidak ada batasan

UNHEX()

Ya

  • Fungsi ini mengembalikan string biner.

  • Kesalahan dikembalikan jika ditemukan digit non-heksadesimal.

UPPER()

Ya

Tidak ada batasan

WEIGHT_STRING()

Tidak

Tidak berlaku

Fungsi tanggal

Fungsi tanggal dalam instansi analitik DuckDB saat ini tidak menerima string sebagai input. Anda harus terlebih dahulu melakukan konversi tipe eksplisit. Contohnya:

  • Untuk kolom string dalam tabel:

    SELECT ADDDATE(CAST(varchar_test as TIME), INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(CAST(varchar_test as DATE), INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(CAST(varchar_test as DATETIME), INTERVAL 1 DAY) FROM t1;
  • Untuk konstanta literal string:

    SELECT ADDDATE(TIME '12:00:00', INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(DATE '2020-01-01', INTERVAL 1 DAY) FROM t1;
    SELECT ADDDATE(TIMESTAMP '2020-01-01 12:00:00', INTERVAL 1 DAY) FROM t1;

Nama fungsi

Didukung

Batasan

ADDDATE()

Ya

Saat parameter pertama fungsi `ADDDATE` bertipe TIME, seperti dalam ADDDATE(TIME '12:00:00', INTERVAL 1 HOUR), fungsi melakukan konversi tipe implisit dari TIME ke TIMESTAMP untuk perhitungan. Untuk menghindari konversi tipe implisit ini, gunakan fungsi DATE_ADD.

ADDTIME()

Ya

Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten.

CONVERT_TZ()

Ya

Tidak ada batasan

CURRENT_DATE(),CURRENT_DATE

Ya

Tidak ada batasan

CURRENT_TIME(),CURRENT_TIME

Ya

Tidak ada batasan

CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP

Ya

Tidak ada batasan

CURTIME()

Ya

Tidak ada batasan

DATE()

Ya

Tidak ada batasan

DATE_ADD()

Ya

Saat parameter pertama fungsi DATE_ADD bertipe TIME, seperti dalam DATE_ADD(TIME '12:00:00', INTERVAL 1 HOUR), fungsi tidak melakukan konversi tipe implisit dari TIME ke TIMESTAMP.

DATE_FORMAT()

Ya

Spesifikasi format %X, %V, dan %u tidak didukung.

DATE_SUB()

Ya

Sama dengan DATE_ADD().

DATEDIFF()

Ya

Tidak ada batasan

DAY()

Ya

Tidak ada batasan

DAYNAME()

Ya

Tidak ada batasan

DAYOFMONTH()

Ya

Tidak ada batasan

DAYOFWEEK()

Ya

Tidak ada batasan

DAYOFYEAR()

Ya

Tidak ada batasan

EXTRACT()

Ya

Tidak ada batasan

FROM_DAYS()

Ya

Tidak ada batasan

FROM_UNIXTIME()

Ya

Tidak ada batasan

GET_FORMAT()

Tidak

Tidak berlaku

HOUR()

Ya

Tidak ada batasan

LAST_DAY

Ya

Tidak ada batasan

LOCALTIME(),LOCALTIME

Ya

Tidak ada batasan

LOCALTIMESTAMP,LOCALTIMESTAMP()

Ya

Tidak ada batasan

MAKEDATE()

Ya

Tidak ada batasan

MAKETIME()

Ya

Tidak ada batasan

MICROSECOND()

Ya

Tidak ada batasan

MINUTE()

Ya

Tidak ada batasan

MONTH()

Ya

Tidak ada batasan

MONTHNAME()

Ya

Tidak ada batasan

NOW()

Ya

Tidak ada batasan

PERIOD_ADD()

Ya

Tahun lebih besar dari 9999 tidak didukung.

PERIOD_DIFF()

Ya

Tahun lebih besar dari 9999 tidak didukung.

QUARTER()

Ya

Tidak ada batasan

SEC_TO_TIME()

Ya

Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten.

SECOND()

Ya

Tidak ada batasan

STR_TO_DATE()

Ya

  • Spesifikasi format %X, %V, dan %u tidak didukung.

  • Jika spesifikasi format tidak cocok dengan benar, fungsi mengembalikan NULL.

SUBDATE()

Ya

Sama dengan ADDDATE().

SUBTIME()

Ya

Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten.

SYSDATE()

Ya

Tidak ada batasan

TIME()

Tidak

Tidak berlaku

TIME_FORMAT()

Ya

Tidak ada batasan

TIME_TO_SEC()

Ya

Input dalam format DAY TIME tidak didukung, misalnya, select time_to_sec('1 12:00:00');.

TIMEDIFF()

Tidak

Tidak berlaku

TIMESTAMP()

Tidak

Tidak berlaku

TIMESTAMPADD()

Ya

Tidak ada batasan

TIMESTAMPDIFF()

Ya

Tidak ada batasan

TO_DAYS()

Ya

Tidak ada batasan

TO_SECONDS()

Ya

Tidak ada batasan

UNIX_TIMESTAMP()

Ya

Tidak ada batasan

UTC_DATE()

Ya

Tidak ada batasan

UTC_TIME()

Ya

Tidak ada batasan

UTC_TIMESTAMP()

Ya

Tidak ada batasan

WEEK()

Ya

Tidak ada batasan

WEEKDAY()

Ya

Tidak ada batasan

WEEKOFYEAR()

Ya

Tidak ada batasan

YEAR()

Ya

Tidak ada batasan

YEARWEEK()

Ya

Tidak ada batasan

Fungsi JSON

Nama Fungsi

Didukung

Batasan

JSON_ARRAY()

Ya

Tidak ada batasan

JSON_ARRAY_APPEND()

Tidak

Tidak berlaku

JSON_ARRAY_INSERT()

Tidak

Tidak berlaku

JSON_CONTAINS()

Tidak

Tidak berlaku

JSON_CONTAINS_PATH()

Tidak

Tidak berlaku

JSON_DEPTH()

Ya

Tidak ada batasan

JSON_EXTRACT()

Ya

Tidak ada batasan

JSON_INSERT()

Tidak

Tidak berlaku

JSON_KEYS()

Ya

Tidak ada batasan

JSON_LENGTH()

Ya

Tidak ada batasan

JSON_MERGE()

Tidak

Tidak berlaku

JSON_MERGE_PATCH()

Ya

Hanya mendukung penggabungan dua objek JSON. Urutan bidang objek JSON yang digabungkan mungkin berbeda dari yang ada di MySQL.

JSON_MERGE_PRESERVE()

Tidak

Tidak berlaku

JSON_OBJECT()

Ya

Tidak ada batasan

JSON_OVERLAPS()

Ya

Tidak ada batasan

JSON_PRETTY()

Ya

Tidak ada batasan

JSON_QUOTE()

Ya

Tidak ada batasan

JSON_REMOVE()

Tidak

Tidak berlaku

JSON_REPLACE()

Tidak

Tidak berlaku

JSON_SCHEMA_VALID()

Tidak

Tidak berlaku

JSON_SCHEMA_VALIDATION_REPORT()

Tidak

Tidak berlaku

JSON_SEARCH()

Tidak

Tidak berlaku

JSON_SET()

Tidak

Tidak berlaku

JSON_STORAGE_FREE()

Tidak

Tidak berlaku

JSON_STORAGE_SIZE()

Tidak

Tidak berlaku

JSON_TABLE()

Tidak

Tidak berlaku

JSON_TYPE()

Tidak

Tidak berlaku

JSON_UNQUOTE()

Tidak

Tidak berlaku

JSON_VALID()

Ya

Tidak ada batasan

JSON_VALUE()

Tidak

Tidak berlaku

MEMBER OF()

Tidak

Tidak berlaku

Fungsi jendela

Nama fungsi

Didukung

Batasan

CUME_DIST()

Ya

Tidak ada batasan

DENSE_RANK()

Ya

Tidak ada batasan

FIRST_VALUE()

Ya

Tidak ada batasan

LAG()

Ya

Tidak ada batasan

LAST_VALUE()

Ya

Tidak ada batasan

LEAD()

Ya

Tidak ada batasan

NTH_VALUE()

Ya

Tidak ada batasan

NTILE()

Ya

Tidak ada batasan

PERCENT_RANK()

Ya

Tidak ada batasan

RANK()

Ya

Tidak ada batasan

ROW_NUMBER()

Ya

Tidak ada batasan

Batasan lainnya

Instansi analitik DuckDB tidak mendukung kueri tampilan (view).