dataengref migrate

SQL function equivalents for warehouse migrations

SQL Server, Oracle and Teradata functions and their Snowflake, Databricks and BigQuery equivalents, with the behavior differences that break migrated queries.

Migration checklists

FromTo SnowflakeTo DatabricksTo BigQuery
SQL ServerSQL Server to SnowflakeSQL Server to DatabricksSQL Server to BigQuery
OracleOracle to SnowflakeOracle to DatabricksOracle to BigQuery
TeradataTeradata to SnowflakeTeradata to DatabricksTeradata to BigQuery

SQL Server functions

FunctionPurposeSnowflakeDatabricksBigQuery
CHARINDEXPosition of a substringSame nameSame nameRewrite
CONVERTConvert type, with date style codesRewriteRewriteRewrite
DATEADDAdd an interval to a dateSame nameSame nameRewrite
DATEDIFFDifference between two datesSame nameSame nameRewrite
EOMONTHLast day of the monthRewriteRewriteRewrite
GETDATECurrent date and timeSame nameSame nameRewrite
IIFInline if-then-elseDifferent nameDifferent nameDifferent name
ISNULLReplace NULL with a valueDifferent nameDifferent nameDifferent name
LENLength of a stringSame nameSame nameDifferent name
STRING_AGGConcatenate values of a groupDifferent nameSame nameSame name
STUFFReplace part of a stringDifferent nameDifferent nameRewrite
TOPLimit the number of rowsSame nameRewriteRewrite

Oracle functions

FunctionPurposeSnowflakeDatabricksBigQuery
ADD_MONTHSAdd months to a dateSame nameSame nameRewrite
DECODEMap values (switch)Same nameSame nameRewrite
DUALOne-row dummy tableRewriteRewriteRewrite
LISTAGGConcatenate values of a groupSame nameSame nameDifferent name
NVLReplace NULL with a valueSame nameSame nameDifferent name
ROWNUMRow number pseudocolumnRewriteRewriteRewrite
SYSDATECurrent date and timeSame nameRewriteRewrite
TO_CHARFormat a date or number as textSame nameRewriteRewrite

Teradata functions

FunctionPurposeSnowflakeDatabricksBigQuery
ZEROIFNULLReplace NULL with zeroSame nameRewriteRewrite

Labels: “Same name” keeps working as written, “Different name” has the same behavior under another name, “Rewrite” needs a different construct.