Function / Example ToSql |
MySQL / MariaDB | PostgreSQL | SQLite | Oracle | MS SQL | DB2 (not tested on real DB) |
|
---|---|---|---|---|---|---|---|
Number functions |
ABS column.abs |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
CEIL column.ceil |
✔ | ✔ | CASE + CAST | ✔ | CEILING() | CEILING() | |
FLOOR column.floor |
✔ | ✔ | CASE + CAST | ✔ | ✔ | ✔ | |
RAND Arel.rand |
✔ | ✔ | RANDOM() | dbms_random.value() | ✔ | ✔ | |
ROUND column.round(precision = 0) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
SUM / AVG / MIN / MAX + x column.sum + 42 |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
String functions |
CONCAT column + "string" |
✔ | ✔ | || | ✔ | + | ✔ |
LENGTH column.length |
✔ | ✔ | ✔ | ✔ | LEN() | ✔ | |
LOCATE column.locate("string") |
✔ | ✔ | INSTR() | ✔ | CHARINDEX() | ✔ | |
FIND_IN_SET column & ("l") |
✔ | ✔ | db.create_function( "find_in_set", 1 ) do |func, value1, value2|, func.result =value1.index(value2) end |
✔ | ✔ | ✔ | |
SOUNDEX column.soundex |
✔ | require fuzzystrmatch | ✔ | ✔ | ✔ | ✔ | |
REPLACE column.replace("s","X") |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
REGEXP column =~ "pattern" |
✔ | ✔ | require pcre.so | REGEXP_LIKE | LIKE | ✔ | |
NOT_REGEXP column != "pattern" |
✔ | ✔ |
require pcre.so | NOT REGEXP_LIKE | NOT LIKE | ✔ | |
ILIKE (in Arel6) column.imatches('%pattern') |
LOWER() LIKE LOWER() | ✔ | ✔ | LOWER() LIKE LOWER() | LOWER() LIKE LOWER() | LOWER() LIKE LOWER() | |
TRIM (leading) column.trim("LEADING","M") |
✔ | LTRIM() | LTRIM() | ✔ | ✔ | LTRIM() | |
TRIM (trailing) column.trim("TRAILING","g") |
✔ | RTRIM() | RTRIM() | ✔ | ✔ | Rtrim() | |
TRIM (both) column.trim("BOTH","e") |
✔ | TRIM() | TRIM() | ✔ | LTRIM(RTRIM()) | TRIM() | |
LOWER column.downcase |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
UPPER column.upcase |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Date functions |
DATEADD column + 2.year |
DATE_ADD() |
✔ | ✔ | ✔ | ✔ | + |
DATEDIFF column - date |
DATEDIFF() |
✔ | JULIANDAY() - JULIANDAY() | - | ✔ | DAY() | |
DAY column.day |
✔ | ✔ | STRFTIME() | ✔ | ✔ | ✔ | |
MONTH column.month |
✔ | ✔ | STRFTIME() | ✔ | ✔ | ✔ | |
WEEK column.week |
✔ | ✔ | STRFTIME() | ✔ | ✔ | ✔ | |
YEAR column.year |
✔ | ✔ | STRFTIME() | ✔ | ✔ | ✔ | |
Comparators functions |
COALESCE column.coalesce(var) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
ISNULL column.isnull() |
IFNULL() | ✔ | ✔ | NVC() | ✔ | ✔ | |
== column == integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
!= column != integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
> column > integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
>= column >= integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
< column < integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
<= column <= integer |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Boolean functions |
OR ( ⋁ ) column.eq(var).⋁(column.eq(var)) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
AND ( ⋀ ) column.eq(var).⋀(column.eq(var)) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Bulk Insert |
insert_manager.bulk_insert(@cols, @data) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Set Operators |
UNION ( + ) query + query |
to be tested | to be tested | to be tested | to be tested | to be tested | to be tested |