# Список функций, принимаемых в выражении метрики

Редактор метрик передает выражения напрямую в ClickHouse. Ниже приведен полный список функций ClickHouse, которые разрешено использовать в выражениях метрик Webim.

Использование функций, не входящих в этот список, не поддерживается.

Описание работы функций, их аргументов и примеры см. в [официальной документации ClickHouse](https://clickhouse.com/docs/ru/sql-reference/functions/).

## Агрегатные функции

  * `avg`

  * `count`

  * `max`

  * `min`

  * `sum`

  * `uniq`

## Арифметические функции

  * `abs`

  * `divide`

  * `divideDecimal`

  * `gcd`

  * `intDiv`

  * `intDivOrZero`

  * `max2`

  * `min2`

  * `minus`

  * `modulo`

  * `moduloOrZero`

  * `multiply`

  * `multiplyDecimal`

  * `negate`

  * `plus`

  * `positiveModulo`

## Функции округления

  * `floor`

  * `round`

  * `roundAge`

  * `roundBankers`

  * `roundDown`

  * `roundDuration`

  * `roundToExp2`

## Функции сравнения

  * `equals`

  * `greater`

  * `greaterOrEquals`

  * `less`

  * `lessOrEquals`

  * `notEquals`

## Условные функции

  * `greatest`

  * `if`

  * `least`

  * `multiIf`

## Функции преобразования типов

  * `accurateCast`

  * `accurateCastOrDefault`

  * `accurateCastOrNull`

  * `CAST`

  * `dateTime64ToSnowflake`

  * `dateTimeToSnowflake`

  * `formatRow`

  * `formatRowNoNewline`

  * `parseDateTime`

  * `parseDateTimeOrNull`

  * `parseDateTimeOrZero`

  * `parseDateTimeBestEffort`

  * `parseDateTimeBestEffortOrNull`

  * `parseDateTimeBestEffortOrZero`

  * `parseDateTime64BestEffort`

  * `parseDateTime64BestEffortOrNull`

  * `parseDateTime64BestEffortOrZero`

  * `parseDateTime64BestEffortUS`

  * `parseDateTime64BestEffortUSOrNull`

  * `parseDateTime64BestEffortUSOrZero`

  * `parseDateTimeInJodaSyntax`

  * `parseDateTimeInJodaSyntaxOrNull`

  * `parseDateTimeInJodaSyntaxOrZero`

  * `reinterpret`

  * `reinterpretAsDate`

  * `reinterpretAsDateTime`

  * `reinterpretAsFixedString`

  * `reinterpretAsFloat`

  * `reinterpretAsInt`

  * `reinterpretAsString`

  * `reinterpretAsUInt`

  * `reinterpretAsUUID`

  * `second`

  * `snowflakeToDateTime`

  * `snowflakeToDateTime64`

  * `toDate`

  * `toDateOrDefault`

  * `toDateOrNull`

  * `toDateOrZero`

  * `toDate32`

  * `toDate32OrDefault`

  * `toDate32OrNull`

  * `toDate32OrZero`

  * `toDateTime`

  * `toDateTimeOrDefault`

  * `toDateTimeOrNull`

  * `toDateTimeOrZero`

  * `toDateTime64`

  * `toDateTime64OrDefault`

  * `toDateTime64OrNull`

  * `toDateTime64OrZero`

  * `toDecimal`

  * `toDecimalString`

  * `toFixedString`

  * `toFloat`

  * `toInt`

  * `toInterval`

  * `toLowCardinality`

  * `toString`

  * `toStringCutToZero`

  * `toUInt`

  * `toUnixTimestamp64Micro`

  * `toUnixTimestamp64Milli`

  * `toUnixTimestamp64Nano`

## Функции для работы с Nullable-аргументами

  * `assumeNotNull`

  * `coalesce`

  * `ifNull`

  * `isNotNull`

  * `isNull`

  * `isZeroOrNull`

  * `nullIf`

  * `toNullable`

## Функции для работы с датами и временем

  * `addDays`

  * `addHours`

  * `addMinutes`

  * `addMonths`

  * `addQuarters`

  * `addSeconds`

  * `addWeeks`

  * `addYears`

  * `age`

  * `date_add`

  * `date_diff`

  * `datediff`

  * `date_sub`

  * `date_trunc`

  * `dateName`

  * `formatDateTime`

  * `formatDateTimeInJodaSyntax`

  * `fromModifiedJulianDay`

  * `fromModifiedJulianDayOrNull`

  * `fromUnixTimestamp`

  * `fromUnixTimestampInJodaSyntax`

  * `fromUnixTimestamp64Micro`

  * `fromUnixTimestamp64Milli`

  * `fromUnixTimestamp64Nano`

  * `fromUTCTimestamp`

  * `makeDate`

  * `makeDate32`

  * `makeDateTime`

  * `makeDateTime64`

  * `monthName`

  * `now`

  * `now64`

  * `nowInBlock`

  * `serverTimeZone`

  * `subtractYears`

  * `subtractQuarters`

  * `subtractMonths`

  * `subtractWeeks`

  * `subtractDays`

  * `subtractHours`

  * `subtractMinutes`

  * `subtractSeconds`

  * `timeSlot`

  * `timeSlots`

  * `timestamp_add`

  * `timestamp_sub`

  * `timeZone`

  * `timeZoneOf`

  * `timeZoneOffset`

  * `today`

  * `toDayOfMonth`

  * `toDayOfWeek`

  * `toDayOfYear`

  * `toDaysSinceYearZero`

  * `toHour`

  * `toISOWeek`

  * `toISOYear`

  * `toLastDayOfMonth`

  * `toLastDayOfWeek`

  * `toMinute`

  * `toModifiedJulianDay`

  * `toModifiedJulianDayOrNull`

  * `toMonday`

  * `toMonth`

  * `toQuarter`

  * `toRelativeDayNum`

  * `toRelativeHourNum`

  * `toRelativeMinuteNum`

  * `toRelativeMonthNum`

  * `toRelativeQuarterNum`

  * `toRelativeSecondNum`

  * `toRelativeWeekNum`

  * `toRelativeYearNum`

  * `toSecond`

  * `toStartOfDay`

  * `toStartOfFifteenMinutes`

  * `toStartOfFiveMinutes`

  * `toStartOfHour`

  * `toStartOfInterval`

  * `toStartOfISOYear`

  * `toStartOfMinute`

  * `toStartOfMonth`

  * `toStartOfQuarter`

  * `toStartOfSecond`

  * `toStartOfTenMinutes`

  * `toStartOfWeek`

  * `toStartOfYear`

  * `toTime`

  * `toTimezone`

  * `toUnixTimestamp`

  * `toUTCTimestamp`

  * `toWeek`

  * `toYear`

  * `toYearWeek`

  * `toYYYYMM`

  * `toYYYYMMDD`

  * `toYYYYMMDDhhmmss`

  * `yesterday`

## Функции для работы с массивами

  * `array`

  * `arrayCompact`

  * `arrayCount`

  * `arrayDistinct`

  * `arrayElement`

  * `arrayFlatten`

  * `arraySort`

  * `countEqual`

  * `empty`

  * `groupArrayArray`

  * `has`

  * `hasAll`

  * `hasAny`

  * `hasSubstr`

  * `indexOf`

  * `length`

  * `notEmpty`

  * `range`

  * `reverse`

## Функции для работы со строками

  * `appendTrailingCharIfAbsent`

  * `concat`

  * `concatAssumeInjective`

  * `concatWithSeparator`

  * `concatWithSeparatorAssumeInjective`

  * `empty`

  * `endsWith`

  * `endsWithUTF8`

  * `isValidUTF8`

  * `leftPad`

  * `leftPadUTF8`

  * `length`

  * `lengthUTF8`

  * `lower`

  * `lowerUTF8`

  * `notEmpty`

  * `repeat`

  * `reverse`

  * `reverseUTF8`

  * `rightPad`

  * `rightPadUTF8`

  * `space`

  * `startsWith`

  * `startsWithUTF8`

  * `substring`

  * `substringUTF8`

  * `substringIndex`

  * `substringIndexUTF8`

  * `toValidUTF8`

  * `trim`

  * `trimBoth`

  * `trimLeft`

  * `trimRight`

  * `upper`

  * `upperUTF8`

## Функции поиска в строках

  * `countMatches`

  * `countSubstrings`

  * `extract`

  * `extractAll`

  * `extractAllGroupsHorizontal`

  * `extractAllGroupsVertical`

  * `hasSubsequence`

  * `hasSubsequenceCaseInsensitive`

  * `hasSubsequenceUTF8`

  * `hasSubsequenceCaseInsensitiveUTF8`

  * `ilike`

  * `like`

  * `multiFuzzyMatchAllIndices`

  * `multiFuzzyMatchAny`

  * `multiFuzzyMatchAnyIndex`

  * `multiMatchAllIndices`

  * `multiMatchAny`

  * `multiMatchAnyIndex`

  * `multiSearchAllPositions`

  * `multiSearchAllPositionsUTF8`

  * `multiSearchAny`

  * `multiSearchFirstIndex`

  * `multiSearchFirstPosition`

  * `ngramDistance`

  * `ngramSearch`

  * `notILike`

  * `notLike`

  * `position`

  * `positionCaseInsensitive`

  * `positionCaseInsensitiveUTF8`

  * `regexpExtract`

## Функции разбиения и слияния строк и массивов

  * `alphaTokens`

  * `arrayStringConcat`

  * `extractAllGroups`

  * `ngrams`

  * `splitByChar`

  * `splitByNonAlpha`

  * `splitByRegexp`

  * `splitByString`

  * `splitByWhitespace`

## Функции поиска и замены в строках

  * `regexpQuoteMeta`

  * `replaceAll`

  * `replaceOne`

  * `replaceRegexpOne`

  * `replaceRegexpAll`

  * `tokens`

## Статистические функции

  * `approxdistinct`

  * `format`

  * `notEmpty`

## Прочие функции

  * `greatest`

  * `least`

---

Источник: https://webim.ru/kb/for-analytics/analytics-designer/metrics/metrics-function-list.html
