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 |
| Kompatibel |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
|
| |
Tipe karakter |
| Hanya set karakter UTF-8 dan aturan pengurutan yang didukung. |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
| Kompatibel | |
Tipe karakter biner |
| Kompatibel |
| Kompatibel | |
| Kompatibel | |
Tipe waktu |
| Kompatibel |
| Instansi analitik DuckDB mendukung rentang dari MySQL, di sisi lain, mendukung rentang | |
| Instansi analitik DuckDB mendukung rentang dari MySQL mendukung rentang dari | |
| Instansi analitik DuckDB mendukung rentang dari MySQL mendukung rentang dari | |
| Kompatibel | |
Tipe data spasial |
| 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_HOUREkspresi 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'danexpr "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, atauUNSIGNEDtidak 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
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, danENUM.Tipe string biner mengacu pada tipe MySQL
BINARY,VARBINARY,BIT,TINYBLOB,BLOB,MEDIUMBLOB, danLONGBLOB.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'ketruedan semua string lainnya kefalse. 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 | +------+
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, danENUM.Tipe string biner mengacu pada tipe MySQL
BINARY,VARBINARY,BIT,TINYBLOB,BLOB,MEDIUMBLOB, danLONGBLOB.
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 |
| Ya | Tidak ada batasan |
| Ya | Tipe string, DECIMAL, dan tanggal tidak didukung. |
| Ya | Tipe string, DECIMAL, dan tanggal tidak didukung. |
| Ya | Tipe string, DECIMAL, dan tanggal tidak didukung. |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya |
|
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
Fungsi numerik
Fungsi numerik tidak mendukung tipe BOOLEAN.
Nama fungsi | Didukung | Batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya |
|
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| 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 |
| Ya | Tidak ada batasan |
| Ya | Di MySQL, |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Parameter pertama fungsi ini harus berupa tipe karakter. Tipe non-karakter dapat menghasilkan hasil yang tidak konsisten dengan MySQL. |
| Tidak | Tidak berlaku |
| Ya | Fungsi ini menggunakan aturan decoding Base64. Jika decoding gagal, kesalahan dikembalikan. |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Ya | `LIKE` tidak dipengaruhi oleh aturan pengurutan. |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Ya | Fungsi |
| Tidak | Tidak berlaku |
| Ya | Di MySQL, |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya: Dapat menerima string biner sebagai input. | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Sintaks |
| Ya | Sintaks |
| Ya | Tidak ada batasan |
| Ya: Dapat menerima string biner sebagai input. | Fungsi ini mengembalikan string biner. |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya |
|
| Ya | Tidak ada batasan |
| 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 |
| Ya | Saat parameter pertama fungsi `ADDDATE` bertipe TIME, seperti dalam |
| Ya | Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten. |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Saat parameter pertama fungsi |
| Ya | Spesifikasi format |
| Ya | Sama dengan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tahun lebih besar dari 9999 tidak didukung. |
| Ya | Tahun lebih besar dari 9999 tidak didukung. |
| Ya | Tidak ada batasan |
| Ya | Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten. |
| Ya | Tidak ada batasan |
| Ya |
|
| Ya | Sama dengan |
| Ya | Jika nilai kembali melebihi rentang tipe data waktu untuk instansi analitik DuckDB, hasilnya akan tidak konsisten. |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Input dalam format DAY TIME tidak didukung, misalnya, |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
Fungsi JSON
Nama Fungsi | Didukung | Batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Ya | Hanya mendukung penggabungan dua objek JSON. Urutan bidang objek JSON yang digabungkan mungkin berbeda dari yang ada di MySQL. |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
| Ya | Tidak ada batasan |
| Tidak | Tidak berlaku |
| Tidak | Tidak berlaku |
Fungsi jendela
Nama fungsi | Didukung | Batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
| Ya | Tidak ada batasan |
Batasan lainnya
Instansi analitik DuckDB tidak mendukung kueri tampilan (view).