| Aggregation |
AVG(X) |
`AVG(X)` |
|
| Aggregation |
COUNT(X) |
`COUNT(X)` or `COUNT(*)` |
`COUNT(X)` counts non-NULL values in column X. `COUNT(*)` counts all rows. |
| Aggregation |
COUNT_DISTINCT(X) |
`COUNT(DISTINCT X)` |
|
| Aggregation |
MAX(X) |
`MAX(X)` |
|
| Aggregation |
MEDIAN(X) |
`PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY X) OVER ()` (SQL Server 2012+) |
Azure SQL Database supports `PERCENTILE_CONT` and `PERCENTILE_DISC` for calculating medians/percentiles. |
| Aggregation |
MIN(X) |
`MIN(X)` |
|
| Aggregation |
PERCENTILE(X,N) |
`PERCENTILE_CONT(N/100) WITHIN GROUP (ORDER BY X) OVER ()` or `PERCENTILE_DISC(N/100) WITHIN GROUP (ORDER BY X) OVER ()` |
`N` should be between 0 and 100. `PERCENTILE_CONT` (continuous distribution) interpolates, `PERCENTILE_DISC` (discrete distribution) returns an actual value from the set. |
| Aggregation |
STDDEV(X) |
`STDEV(X)` (sample) or `STDEVP(X)` (population) |
|
| Aggregation |
SUM(X) |
`SUM(X)` |
|
| Aggregation |
VARIANCE(X) |
`VAR(X)` (sample) or `VARP(X)` (population) |
|
| Arithmetic |
ABS(X) |
`ABS(X)` |
|
| Arithmetic |
ACOS(X) |
`ACOS(X)` |
|
| Arithmetic |
ASIN(X) |
`ASIN(X)` |
|
| Arithmetic |
ATAN(X) |
`ATAN(X)` |
|
| Arithmetic |
CEIL(X) |
`CEILING(X)` |
|
| Arithmetic |
COS(X) |
`COS(X)` |
|
| Arithmetic |
FLOOR(X) |
`FLOOR(X)` |
|
| Arithmetic |
LOG(X) (base 2) |
`LOG(X, 2)` |
SQL Server's `LOG` function allows specifying the base. |
| Arithmetic |
LOG10(X) |
`LOG10(X)` |
|
| Arithmetic |
NARY_MAX(X, Y [,Z]*) |
`IIF(X > Y, X, Y)` (for two arguments), nested `IIF` or `CASE` for more. |
SQL Server 2012+ supports `IIF`. For multiple arguments, you can nest `IIF` or use a `CASE` statement. |
| Arithmetic |
NARY_MIN(X, Y [,Z]*) |
`IIF(X < Y, X, Y)` (for two arguments), nested `IIF` or `CASE` for more. |
Similar to `NARY_MAX`, use `IIF` or `CASE` for multiple arguments. |
| Arithmetic |
POWER(X, Y) |
`POWER(X, Y)` |
|
| Arithmetic |
ROUND(X, Y) |
`ROUND(X, Y)` |
|
| Arithmetic |
SIN(X) |
`SIN(X)` |
|
| Arithmetic |
SQRT(X) |
`SQRT(X)` |
|
| Arithmetic |
TAN(X) |
`TAN(X)` |
|
| Conditional |
CASE WHEN condition THEN result [ELSE else_result] END |
`CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END` |
Standard SQL `CASE` statement. |
| Conditional |
CASE input_expression WHEN expr_to_match THEN result [ELSE result] END |
`CASE input_expression WHEN expression_to_match THEN result [WHEN expression_to_match THEN result] [...] [ELSE result] END` |
Standard SQL `CASE` (simple form). |
| Conditional |
COALESCE(field_expression[,field_expression, ...]) |
`COALESCE(field_expression1, field_expression2, ...)` |
|
| Conditional |
IF(condition, true_result, false_result) |
`IIF(condition, true_result, false_result)` (SQL Server 2012+) or `CASE WHEN condition THEN true_result ELSE false_result END` |
`IIF` is a more concise way to write simple `CASE` statements. |
| Conditional |
IFNULL(input_expression, null_result) |
`ISNULL(input_expression, null_result)` or `COALESCE(input_expression, null_result)` |
`ISNULL` is SQL Server specific. `COALESCE` is standard SQL. |
| Conditional |
NULLIF(input_expression, expression_to_match) |
`NULLIF(input_expression, expression_to_match)` |
|
| Date |
CURRENT_DATE([time_zone]) |
`CAST(GETDATE() AS DATE)` or `CURRENT_TIMESTAMP` (then cast) |
`GETDATE()` returns current datetime. Cast to `DATE` for only the date part. Time zone handling is more complex in SQL. |
| Date |
CURRENT_DATETIME([time_zone]) |
`GETDATE()` or `SYSDATETIME()` |
`SYSDATETIME()` provides higher precision than `GETDATE()`. For time zones, consider `GETUTCDATE()` or `SYSDATETIMEOFFSET()`. |
| Date |
DATE(year, month, day) |
`DATEFROMPARTS(year, month, day)` |
SQL Server 2012+ function. |
| Date |
DATE_DIFF(X, Y) (days) |
`DATEDIFF(day, Y, X)` |
Calculates the difference in specified datepart (`day`). |
| Date |
DATE_FROM_UNIX_DATE(integer) |
`DATEADD(day, integer, '1970-01-01')` |
Adds the integer number of days to the Unix epoch. |
| Date |
DATETIME(year, month, day, hour, minute, second) |
`DATETIMEFROMPARTS(year, month, day, hour, minute, second, 0)` |
SQL Server 2012+ function. The last argument is milliseconds (set to 0). |
| Date |
DATETIME_ADD(datetime_expression, INTERVAL integer part) |
`DATEADD(part, integer, datetime_expression)` |
`part` can be `year`, `quarter`, `month`, `dayofyear`, `day`, `week`, `weekday`, `hour`, `minute`, `second`, `millisecond`. |
| Date |
DATETIME_DIFF(date_expression, date_expression, part) |
`DATEDIFF(part, date_expression1, date_expression2)` |
Calculates the difference in specified `part`. Note the order of arguments. |
| Date |
DATETIME_SUB(datetime_expression, INTERVAL integer part) |
`DATEADD(part, -integer, datetime_expression)` |
Subtracts the specified interval by using a negative integer. |
| Date |
DATETIME_TRUNC(date_expression, part) |
`DATEADD(part, DATEDIFF(part, 0, date_expression), 0)` |
Truncates a date to the beginning of the specified `part`. E.g., `DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)` for start of month. |
| Date |
DAY(date_expression) |
`DAY(date_expression)` |
|
| Date |
EXTRACT(part FROM date_expression) |
`DATEPART(part, date_expression)` |
`part` can be `year`, `month`, `day`, `hour`, `minute`, `second`, `quarter`, `week`, `weekday`, etc. |
| Date |
FORMAT_DATETIMEReturns a formatted date string. |
`FORMAT(datetime_expression, format_string)` (SQL Server 2012+) or `CONVERT(VARCHAR, datetime_expression, style)` |
`FORMAT` is more flexible for custom formats. `CONVERT` uses predefined styles. |
| Date |
HOUR(datetime_expression) |
`DATEPART(hour, datetime_expression)` or `HOUR(datetime_expression)` (deprecated for `DATEPART`) |
`DATEPART` is the preferred function. |
| Date |
MINUTE(datetime_expression) |
`DATEPART(minute, datetime_expression)` or `MINUTE(datetime_expression)` (deprecated) |
`DATEPART` is the preferred function. |
| Date |
MONTH(date_expression) |
`MONTH(date_expression)` |
|
| Date |
PARSE_DATE(format_string, text) |
`CONVERT(DATE, text, style)` or `TRY_CONVERT(DATE, text, style)` |
`style` is a numeric code for date format. `TRY_CONVERT` returns NULL on failure. |
| Date |
PARSE_DATETIME(format_string, text) |
`CONVERT(DATETIME, text, style)` or `TRY_CONVERT(DATETIME, text, style)` |
Similar to `PARSE_DATE` but for datetime. |
| Date |
QUARTER(date_expression) |
`DATEPART(quarter, date_expression)` |
|
| Date |
SECOND(datetime_expression) |
`DATEPART(second, datetime_expression)` or `SECOND(datetime_expression)` (deprecated) |
`DATEPART` is the preferred function. |
| Date |
TODATE(X, Input Format, Output Format) |
`CONVERT(DATE, X, style)` or `FORMAT(X, 'yyyy-MM-dd')` |
Conversion to `DATE` type. `FORMAT` can be used for string representation. |
| Date |
TODAY([time_zone]) |
`CAST(GETDATE() AS DATE)` |
|
| Date |
UNIX_DATE(date_expression) |
`DATEDIFF(day, '1970-01-01', date_expression)` |
Calculates the number of days since the Unix epoch. |
| Date |
WEEK(Date) |
`DATEPART(week, Date)` or `DATEPART(iso_week, Date)` |
`iso_week` is for ISO 8601 week number. |
| Date |
WEEKDAY(Date) |
`DATEPART(weekday, Date)` |
Returns a number (1-7) representing the day of the week, dependent on `SET DATEFIRST` setting. |
| Date |
YEAR(Date) |
`YEAR(Date)` |
|
| Date |
YEARWEEK(Date) |
`CONCAT(YEAR(Date), FORMAT(DATEPART(week, Date), '00'))` |
Concatenates year and two-digit week number. `DATEPART(iso_week, Date)` can be used for ISO week. |
| Geo |
TOCITY(X [,Input Format]) |
Requires custom lookup table or external service. |
Azure SQL does not have built-in functions for direct geographical name lookups from arbitrary input. You would typically use a pre-populated lookup table (e.g., city/country codes) or integrate with an external geocoding API. |
| Geo |
TOCONTINENT(X [,Input Format]) |
Requires custom lookup table or external service. |
|
| Geo |
TOCOUNTRY(X [,Input Format]) |
Requires custom lookup table or external service. |
|
| Geo |
TOREGION(X [,Input Format]) |
Requires custom lookup table or external service. |
|
| Geo |
TOSUBCONTINENT(X [,Input Format]) |
Requires custom lookup table or external service. |
|
| Miscellaneous |
CAST(field_expression AS TYPE) |
`CAST(field_expression AS TYPE)` or `CONVERT(TYPE, field_expression)` |
`TYPE` can be `INT`, `DECIMAL`, `VARCHAR`, `NVARCHAR`, `DATE`, `DATETIME`, etc. `CAST` is standard SQL, `CONVERT` is SQL Server specific and offers more style options for dates/times. |
| Miscellaneous |
HYPERLINK(URL, link label) |
No direct SQL equivalent for display. |
SQL stores data. The rendering of hyperlinks is typically handled by the client application (e.g., a reporting tool, web page). You would store the URL as a `VARCHAR` or `NVARCHAR`. |
| Miscellaneous |
IMAGE(Image URL, [Alternative Text]) |
No direct SQL equivalent for display. |
SQL stores the image URL as a `VARCHAR` or `NVARCHAR`. The display is handled by the client application. |
| Miscellaneous |
NATIVE_DIMENSION("JSON_VALUE('{"name": "Dana"}', '$.name')","STRING") |
`JSON_VALUE(expression, path)` (SQL Server 2016+) |
Azure SQL supports JSON functions. The example shows extracting a value from a JSON string. |
| Text |
CONCAT(X, Y) |
`CONCAT(X, Y)` (SQL Server 2012+) or `X + Y` |
`CONCAT` handles NULLs more gracefully (treats NULL as empty string). `+` operator will result in NULL if any part is NULL. |
| Text |
CONTAINS_TEXT(X, text) (case-sensitive) |
`CHARINDEX(text, X) > 0` |
`CHARINDEX` is case-sensitive by default depending on database collation. Use `COLLATE` for explicit control. |
| Text |
ENDS_WITH(X, text) (case-sensitive) |
`RIGHT(X, LEN(text)) = text` |
|
| Text |
LEFT_TEXT(X, length) |
`LEFT(X, length)` |
|
| Text |
LENGTH(X) |
`LEN(X)` |
|
| Text |
LOWER(X) |
`LOWER(X)` |
|
| Text |
REGEXP_CONTAINS(X, regular_expression) |
`X LIKE '%pattern%'` (for simple patterns), or CLR functions for full regex. |
Azure SQL (SQL Server) does not have native regular expression functions like some other SQL dialects. `LIKE` is for basic wildcard matching. Full regex requires CLR integration, which might have limitations in Azure SQL DB. |
| Text |
REGEXP_EXTRACT(X, regular_expression) |
Requires custom parsing with `SUBSTRING`, `CHARINDEX`, or CLR functions. |
|
| Text |
REGEXP_MATCH(X, regular_expression) |
`X LIKE 'pattern'` (for simple patterns), or CLR functions for full regex. |
|
| Text |
REGEXP_REPLACE(X, regular_expression, replacement) |
`REPLACE(X, 'old_string', 'new_string')` or custom parsing/CLR. |
`REPLACE` is for exact string replacement. Regex replacement is not native. |
| Text |
REPLACE(X, Y, Z) |
`REPLACE(X, Y, Z)` |
|
| Text |
RIGHT_TEXT(X, length) |
`RIGHT(X, length)` |
|
| Text |
STARTS_WITH(X, text) (case-sensitive) |
`X LIKE 'text%'` |
Case-sensitivity depends on database collation. Use `COLLATE` for explicit control. |
| Text |
SUBSTR(X, start index, length) |
`SUBSTRING(X, start index, length)` |
`start index` is 1-based. |
| Text |
TRIM(X) |
`TRIM(X)` (SQL Server 2017+) or `LTRIM(RTRIM(X))` |
`TRIM` removes spaces from both ends. `LTRIM(RTRIM(X))` is a common older method. |
| Text |
UPPER(X) |
`UPPER(X)` |
|
إرسال تعليق