SnowConvert AI - Function References for Teradata¶
QUARTERNUMBER_OF_YEAR_UDF¶
定义¶
一个根据 ISO 日历年计算给定日期所属季度的用户定义的函数 (UDF),类似于 Teradata 的 QUARTERNUMBER_OF_YEAR_UDF(date, 'ISO') 函数。
PUBLIC.QUARTERNUMBER_OF_YEAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TimeSTAMP_TZ
提取季度数的方法。
返回¶
一个整数 (1-4),表示日期属于一年中的哪个季度。
使用示例¶
输入:
SELECT PUBLIC.QUARTERNUMBER_OF_YEAR_UDF(DATE '2022-01-01'),
PUBLIC.QUARTERNUMBER_OF_YEAR_UDF(DATE '2025-12-31');
输出:
4, 1
DAYNUMBER_OF_YEAR_UDF¶
定义¶
返回一年内给定时间戳的天数。天数范围为 1 到 365(闰年为 366)。此函数的行为与 DAYNUMBER_OF_YEAR(DATE, 'ISO') 相同。
PUBLIC.DAYNUMBER_OF_YEAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
从日期获取其在一年中的序号。
返回¶
从 1 到 371 的整数。
示例¶
输入:
SELECT DAYNUMBER_OF_YEAR(CURRENT_DATE,'ISO');
输出:
SELECT
PUBLIC.DAYNUMBER_OF_YEAR_UDF(CURRENT_DATE());
SUBSTR_UDF (STRING, FLOAT)¶
警告
此用户定义函数 (UDF) 接受两个参数(重载函数)。
定义¶
使用起始位置和长度从指定字符串中检索部分文本。
PUBLIC.SUBSTR_UDF(BASE_EXPRESSION STRING, START_POSITION FLOAT)
参数¶
BASE_EXPRESSION 是一个字符串参数,用于定义操作的基本表达式。
要从中提取一部分的源文本。
START_POSITION – 一个浮点数,用于指定输入字符串中的起始位置。
要开始从字符串中提取字符的位置。
返回¶
必须包含的子字符串。
迁移示例¶
输入:
SELECT SUBSTRING('Hello World!' FROM -2);
输出:
SELECT
PUBLIC.SUBSTR_UDF('Hello World!', -2);
CHKNUM_UDF¶
定义¶
验证字符串是否包含有效的数值。
PUBLIC.CHKNUM_UDF(NUM STRING);
参数¶
NUM 一个代表数字的字符串
需要验证的文本字符串。
返回¶
如果输入参数是有效的数值,则返回 1。如果输入不是有效的数字(例如文本或特殊字符),则返回 0。
示例¶
SELECT CHKNUM('1032');
输出:
SELECT
PUBLIC.CHKNUM_UDF('1032');
TD_YEAR_END_UDF¶
定义¶
一个用户定义的函数 (UDF),用于重现 Teradata 的 TD_YEAR_END(DATE) 或 TD_YEAR_END(DATE, 'COMPATIBLE') 函数,可返回给定日期所在年份的最后一天。
PUBLIC.TD_YEAR_END_UDF(INPUT date)
参数¶
INPUT DATE
获取当前年份的最后一天。
返回¶
12 月的最后一天(12 月 31 日)。
使用示例¶
输入:
SELECT PUBLIC.TD_YEAR_END_UDF(DATE '2022-01-01'),
PUBLIC.TD_YEAR_END_UDF(DATE '2022-04-12');
输出:
2022-12-31, 2022-12-31
PERIOD_OVERLAPS_UDF¶
定义¶
实施 OVERLAPS OPERATOR 功能的用户定义的函数 (UDF)。此函数会比较两个或多个时间段,并确定它们是否有重叠的时间范围。
PERIOD_OVERLAPS_UDF(PERIODS ARRAY)
参数¶
PERIODS 是一个包含时间段的数组
将要比较的所有时间段表达式。
返回¶
如果集合中的所有时间段都至少有一个共同点(重叠),则为 TRUE,否则为 FALSE。
迁移示例¶
SELECT
PERIOD(DATE '2009-01-01', DATE '2010-09-24')
OVERLAPS
PERIOD(DATE '2009-02-01', DATE '2009-06-24');
输出:
SELECT
PUBLIC.PERIOD_OVERLAPS_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF¶
定义¶
计算指定日期在当前季度内的周次编号。
PUBLIC.WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算其属于该季度的哪一周的日期。
返回¶
一个整数,表示日期属于该季度的哪一周 (1-13)。
使用示例¶
输入:
SELECT WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF(DATE '2022-05-01', 'COMPATIBLE'),
WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF(DATE '2022-07-06', 'COMPATIBLE')
输出:
5, 1
ROMAN_NUMERALS_MONTH_UDF¶
定义¶
使用罗马数字将日期转换为相应的月份。
PUBLIC.ROMAN_NUMERALS_MONTH_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
从中提取月份的输入日期。
返回¶
varchar 表示从给定日期提取的月份。
使用示例¶
输入:
SELECT PUBLIC.ROMAN_NUMERALS_MONTH_UDF(DATE '2021-10-26');
输出:
'X'
TD_YEAR_BEGIN_UDF¶
定义¶
一个用户定义的函数 (UDF),通过返回给定日期所在年份的第一天来模仿 TD_YEAR_BEGIN 或 TD_YEAR_BEGIN(DATE, 'COMPATIBLE') 的行为。
PUBLIC.TD_YEAR_BEGIN_UDF(INPUT DATE)
参数¶
INPUT DATE
获取当前年份的第一天。
返回¶
1 月的第一天。
使用示例¶
输入:
SELECT TD_YEAR_BEGIN(DATE '2022-01-01', 'COMPATIBLE'),
TD_YEAR_BEGIN(DATE '2022-04-12');
输出:
2022-01-01, 2022-01-01
FULL_MONTH_NAME_UDF¶
定义¶
按您选择的格式返回月份的全名:全部为大写字母、全部为小写字母,或仅将首字母大写。
PUBLIC.FULL_MONTH_NAME_UDF(INPUT TIMESTAMP_TZ, RESULTCASE VARCHAR)
参数¶
INPUT TIMESTAMP_TZ
日期格式应显示月份名称。
RESULTCASE VARCHAR
显示结果时应采用的格式。有效选项为“大写”、“小写”或“首字母大写”。
返回¶
返回一个包含月份全名的 varchar
使用示例¶
输入:
SELECT PUBLIC.FULL_MONTH_NAME_UDF(DATE '2021-10-26', 'uppercase');
SELECT PUBLIC.FULL_MONTH_NAME_UDF(DATE '2021-10-26', 'lowercase');
SELECT PUBLIC.FULL_MONTH_NAME_UDF(DATE '2021-10-26', 'firstOnly');
输出:
OCTOBER
october
October
TO_BYTES_HEX_UDF¶
定义¶
将十进制(以 10 为基数)数字转换为十六进制(以 16 为基数)表示形式。
TO_BYTES_HEX_UDF(INPUT FLOAT)
参数¶
INPUT 是一个浮点数参数。
将转换为十六进制格式的数字。
返回¶
代表十六进制值的字符串。
使用示例¶
输入:
SELECT TO_BYTES_HEX_UDF('448');
输出:
01c0
PERIOD_INTERSECT_UDF¶
定义¶
一个重现 P_INTERSECT 运算符的用户定义的函数 (UDF)。此函数将比较两个或多个时间段并确定它们重叠的位置,返回它们之间的共同时间间隔。
有关源函数的更多详细信息,请参阅 文档 (https://docs.teradata.com/r/SQL-Date-and-Time-Functions-and-Expressions/July-2021/Period-Functions-and-Operators/P_INTERSECT/P_INTERSECT-Syntax)。
PERIOD_INTERSECT_UDF(PERIODS ARRAY)
参数¶
PERIODS 是一个包含时间段的数组。
所有需要比较的时间段表达式。
返回¶
两个时间段相交或共享相同日期的部分。
迁移示例¶
输入:
SELECT
PERIOD(DATE '2009-01-01', DATE '2010-09-24')
P_INTERSECT
PERIOD(DATE '2009-02-01', DATE '2009-06-24');
输出:
SELECT
PUBLIC.PERIOD_INTERSECT_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
INTERVAL_TO_SECONDS_UDF¶
定义¶
将时间间隔转换为秒。
PUBLIC.INTERVAL_TO_SECONDS_UDF
(INPUT_PART VARCHAR(30), INPUT_VALUE VARCHAR())
参数¶
INPUT_PART 是一个 VARCHAR 类型的变量,用于存储输入数据。
将转换为秒的时间长度。
INPUT_VALUE VARCHAR – 接受文本数据的输入参数。
转换的时间间隔类型。示例包括“DAY”、“DAY TO HOUR”和其他有效的间隔类型。
返回¶
一个十进制数字,表示以秒为单位的时间间隔。
TIMESTAMP_ADD_UDF¶
定义¶
将两个时间戳合并为一个值。
PUBLIC.TIMESTAMP_ADD_UDF(FIRST_DATE TIMESTAMP_LTZ, SECOND_DATE TIMESTAMP_LTZ)
参数¶
FIRST_DATE 是一个包含日期和时间信息的时间戳字段,支持时区 (TIMESTAMP_LTZ)
添加此项目的初始日期。
SECOND_DATE 是一个包含时区信息 (TIMESTAMP_LTZ)(带有本地时区的时间戳)的时间戳列
第二次添加该项目的日期。
返回¶
通过组合输入日期参数生成的时间戳。
INTERVAL_MULTIPLY_UDF¶
定义¶
对时间间隔执行乘法运算的用户定义的函数 (UDF)。
PUBLIC.INTERVAL_MULTIPLY_UDF
(INPUT_PART VARCHAR(30), INPUT_VALUE VARCHAR(), INPUT_MULT INTEGER)
参数¶
INPUT_PART 是一个 VARCHAR 类型的变量,用于存储输入数据。
用于乘法的值,指定为“YEAR TO MONTH”。
INPUT_VALUE VARCHAR
要执行乘法的间隔。
INPUT_MULT 是一个整数参数,用作输入值的乘数。
将在乘法运算中使用的数字。
返回¶
输出是通过将时间间隔乘以数值来计算的。
迁移示例¶
输入:
SELECT INTERVAL '6-10' YEAR TO MONTH * 8;
输出:
SELECT
PUBLIC.INTERVAL_MULTIPLY_UDF('YEAR TO MONTH', '6-10', 8);
TD_DAY_OF_WEEK_UDF¶
定义¶
一个用户定义的函数 (UDF),用于重现 Teradata 的 TD_DAY_OF_WEEK 功能。有关原始 Teradata 函数的详细信息,请参阅 此处 (https://docs.teradata.com/r/SQL-Date-and-Time-Functions-and-Expressions/July-2021/Calendar-Functions/td_day_of_week/DayOfWeek)。
PUBLIC.TD_DAY_OF_WEEK_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
从中获取星期几的日期。
返回¶
一个表示星期几的整数,范围为 1 到 7,其中:
1 = 星期日
2 = 星期一
3 = 星期二
4 = 星期三
5 = 星期四
6 = 星期五
7 = 星期六
迁移示例¶
输入:
SELECT td_day_of_week(DATE '2022-03-02');
输出:
SELECT
PUBLIC.TD_DAY_OF_WEEK_UDF(DATE '2022-03-02');
ISO_YEAR_PART_UDF¶
定义¶
根据给定日期计算 ISO 日历年。指定要保留的位数可以缩短结果。
PUBLIC.ISO_YEAR_PART_UDF(INPUT TIMESTAMP_TZ, DIGITS INTEGER)
参数¶
INPUT TIMESTAMP_TZ
从中提取 ISO 年份的日期。
DIGITS 一个整数,表示要显示的最大位数
输出中所需的小数位数。
返回¶
返回代表给定日期的 ISO 年份的字符串 (varchar)。
使用示例¶
输入:
SELECT PUBLIC.ISO_YEAR_PART_UDF(DATE '2021-10-26', 3);
SELECT PUBLIC.ISO_YEAR_PART_UDF(DATE '2021-10-26', 2);
SELECT PUBLIC.ISO_YEAR_PART_UDF(DATE '2021-10-26', 1);
输出:
'021'
'21'
'1'
DIFF_TIME_PERIOD_UDF¶
定义¶
根据指定的时间单位参数计算两个日期之间的时间间隔。
PUBLIC.DIFF_TIME_PERIOD_UDF(TIME STRING, PERIOD VARCHAR(50))
参数¶
TIME 是一种数据类型,用于存储以小时、分钟、秒和分数秒为单位的时间值。是一种数据类型,表示存储为文本字符串的时间值。
将用作锚点的时间戳。
PERIOD 表示时间段的文本字段 (VARCHAR)
用于扩展的时段列。
返回¶
一个数值,表示两个日期之间的时间间隔。
使用示例¶
输入:
SELECT DIFF_TIME_PERIOD_UDF('SECONDS','2022-11-26 10:15:20.000*2022-11-26 10:15:25.000');
输出:
5
WEEK_NUMBER_OF_QUARTER_ISO_UDF¶
定义¶
使用 ISO 日历标准计算日期在所属季度中的周次编号。此函数的行为与 Teradata 的 WEEKNUMBER_OF_QUARTER(DATE, 'ISO') 函数相同。
PUBLIC.WEEK_NUMBER_OF_QUARTER_ISO_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算其属于该季度的哪一周的日期。
返回¶
一个整数,表示这代表了该季度中的哪一周 (1-13)。
使用示例¶
输入:
SELECT WEEKNUMBER_OF_QUARTER(DATE '2022-05-01', 'ISO'),
WEEKNUMBER_OF_QUARTER(DATE '2022-07-06', 'ISO')
输出:
SELECT
PUBLIC.SUBSTR_UDF('Hello World!', -2);
NVP_UDF¶
定义¶
执行与 Teradata 的 NVP 函数 (https://docs.teradata.com/r/SQL-Functions-Expressions-and-Predicates/June-2020/String-Operators-and-Functions/NVP/NVP-Function-Syntax) 相同的功能。
NVP_UDF(INSTRING VARCHAR, NAME_TO_SEARCH VARCHAR, NAME_DELIMITERS VARCHAR, VALUE_DELIMITERS VARCHAR, OCCURRENCE FLOAT)
参数¶
INSTRING VARCHAR
名称-值对是由名称及其对应值组成的数据元素。
VARCHAR 类型的 NAME_TO_SEARCH
用于在名称值对 (NVP) 函数中搜索的名称参数。
NAME_DELIMITERS VARCHAR
用于将名称与对应值分开的字符。
VALUE_DELIMITERS VARCHAR
用于连接名称与其对应值的字符。
OCCURRENCE 是一个浮点数,表示某件事发生了多少次
要搜索的匹配模式的数量。
返回¶
包含与输入字符串相同数据的文本字符串 (VARCHAR)。
使用示例¶
输入:
SELECT PUBLIC.NVP_UDF('entree=-orange chicken&entree+.honey salmon', 'entree', '&', '=- +.', 1);
输出:
orange chicken
MONTH_SHORT_UDF¶
定义¶
以您选择的大写、小写或首字母大写格式返回月份的缩写名称(三个字母)。例如:“Jan”、“jan”或“JAN”。
PUBLIC.MONTH_SHORT_UDF(INPUT TIMESTAMP_TZ, RESULTCASE VARCHAR)
参数¶
INPUT TIMESTAMP_TZ
格式化为显示缩写月份名称的日期。
RESULTCASE VARCHAR
要使用的字母大小写格式。有效选项有:
“uppercase”:将文本转换为全部使用大写字母
“lowercase”:将文本转换为全部使用小写字母
“firstOnly”:仅将首字母大写
返回¶
varchar 包含月份的缩写名称(例如,“Jan”、“Feb”等)。
使用示例¶
输入:
SELECT PUBLIC.MONTH_SHORT_UDF(DATE '2021-10-26', 'uppercase');
SELECT PUBLIC.MONTH_SHORT_UDF(DATE '2021-10-26', 'lowercase');
SELECT PUBLIC.MONTH_SHORT_UDF(DATE '2021-10-26', 'firstOnly');
输出:
OCT
oct
Oct
DATE_TO_INT_UDF¶
定义¶
一个用户定义的函数 (UDF),用于将日期值转换为其数字表示形式,类似于 Teradata 的 DATE-TO-NUMERIC 函数。
PUBLIC.DATE_TO_INT_UDF(DATE_TO_CONVERT DATE)
参数¶
DATE_TO_CONVERT 表示需要转换的日期值
将日期值转换为整数格式。
返回¶
返回数字格式的日期值。
示例¶
输入:
SELECT mod(date '2015-11-26', 5890), sin(current_date);
CREATE TABLE SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR,
CHAR_TYPE CHAR(11),
INTEGER_TYPE INTEGER,
DATE_TYPE DATE,
TIMESTAMP_TYPE TIMESTAMP,
TIME_TYPE TIME,
PERIOD_TYPE PERIOD(DATE)
);
REPLACE VIEW SAMPLE_VIEW
AS
SELECT
CAST(DATE_TYPE AS SMALLINT),
CAST(DATE_TYPE AS DECIMAL),
CAST(DATE_TYPE AS NUMBER),
CAST(DATE_TYPE AS FLOAT),
CAST(DATE_TYPE AS INTEGER)
FROM SAMPLE_TABLE;
输出:
SELECT
mod(PUBLIC.DATE_TO_INT_UDF(date '2015-11-26'), 5890),
sin(PUBLIC.DATE_TO_INT_UDF(CURRENT_DATE()));
CREATE TABLE PUBLIC.SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR,
CHAR_TYPE CHAR(11),
INTEGER_TYPE INTEGER,
DATE_TYPE DATE,
TIMESTAMP_TYPE TIMESTAMP,
TIME_TYPE TIME,
PERIOD_TYPE VARCHAR(24) COMMENT 'PERIOD(DATE)' /*** MSC-WARNING - MSCEWI1036 - PERIOD DATA TYPE "PERIOD(DATE)" CONVERTED TO VARCHAR ***/
);
CREATE OR REPLACE VIEW PUBLIC.SAMPLE_VIEW
AS
SELECT
PUBLIC.DATE_TO_INT_UDF(DATE_TYPE),
PUBLIC.DATE_TO_INT_UDF(DATE_TYPE),
PUBLIC.DATE_TO_INT_UDF(DATE_TYPE),
PUBLIC.DATE_TO_INT_UDF(DATE_TYPE),
PUBLIC.DATE_TO_INT_UDF(DATE_TYPE)
FROM PUBLIC.SAMPLE_TABLE;
PERIOD_UDF¶
定义¶
一个重现 P_INTERSECT 运算符的用户定义的函数 (UDF)。此函数将比较两个或多个时间段并确定它们重叠的位置,返回它们之间的共同时间间隔。
创建周期开始值和结束值的字符串表示形式(TIMESTAMP 表示一种存储日期和时间信息的数据类型。TIME 或 DATE 是一种用于存储不带时间信息的日历日期(年、月和日)的数据类型)。此函数模拟 Teradata 的周期值构造函数。输出字符串遵循 Snowflake 中 PERIOD 值的默认格式。要调整输出的精度,可以执行以下任一操作:
修改会话参数
timestamp_output_format使用此 UDF 的三参数版本
有关源函数的更多详细信息可以在 Teradata 文档 (https://docs.teradata.com/r/SQL-External-Routine-Programming/July-2021/SQL-Data-Type-Mapping/C-Data-Types/PERIOD-DATE/PERIOD-TIME/PERIOD-TIMESTAMP) 中找到。
PERIOD_UDF(D1 TIMESTAMP_NTZ, D2 TIMESTAMP_NTZ)
PERIOD_UDF(D1 DATE, D2 DATE)
PERIOD_UDF(D1 TIME, D2 TIME)
PERIOD_UDF(D1 TIMESTAMP_NTZ, D2 TIMESTAMP_NTZ, PRECISIONDIGITS INT)
PERIOD_UDF(D1 TIME, D2 TIME, PRECISIONDIGITS INT)
PERIOD_UDF(D1 TIMESTAMP_NTZ)
PERIOD_UDF(D1 DATE)
PERIOD_UDF(D1 TIME)
参数¶
TIMESTAMP
TimeStamp 数据类型代表特定的时间点,包括日期和时间两部分。
TIME
时间数据类型表示一天中的特定时间,不包含日期部分。
DATE
日期数据类型表示不含时间部分的日历日期。
PRECISIONDIGITS 指定以数值显示的小数位数。
要以时间格式显示的位数。
返回¶
返回以 PERIOD 类型值表示的字符串
使用示例¶
输入:
SELECT
PERIOD_UDF('2005-02-03'),
PERIOD_UDF(date '2005-02-03'),
PERIOD_UDF(TIMESTAMP '2005-02-03 12:12:12.340000'),
PERIOD_UDF(TIMESTAMP '2005-02-03 12:12:12.340000');
输出:
2005-02-03*2005-02-04,
2005-02-03*2005-02-04,
2005-02-03 12:12:12.340000*2005-02-03 12:12:12.340001,
2005-02-03 12:12:12.340000*2005-02-03 12:12:12.340001
DAYNAME_LONG_UDF (TIMESTAMP_TZ, VARCHAR)¶
警告
这是一个用户定义的函数 (UDF),接受 两个 不同的参数类型。
定义¶
以您选择的大写、小写或首字母大写格式(例如 “MONDAY”、“monday”或“Monday”)返回工作日的全名。
PUBLIC.DAYNAME_LONG_UDF(INPUT TIMESTAMP_TZ, RESULTCASE VARCHAR)
参数¶
INPUT TIMESTAMP_TZ
用于确定日期属于一周中的哪一天的输入日期。
RESULTCASE VARCHAR
将要展示的预期结果或情景。
返回¶
返回一个包含一周中某一天全名的字符串。
使用示例¶
输入:
SELECT PUBLIC.DAYNAME_LONG_UDF(DATE '2021-10-26', 'uppercase');
SELECT PUBLIC.DAYNAME_LONG_UDF(DATE '2021-10-26', 'lowercase');
SELECT PUBLIC.DAYNAME_LONG_UDF(DATE '2021-10-26', 'firstOnly');
输出:
'TUESDAY'
'tuesday'
'Tuesday'
TD_DAY_OF_WEEK_COMPATIBLE_UDF¶
定义¶
处理时间戳以确定它是一周中的哪一天。此函数的行为与 DAYNUMBER_OF_WEEK(DATE, 'COMPATIBLE') 相同。
PUBLIC.TD_DAY_OF_WEEK_COMPATIBLE_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于确定日期属于一周中的哪一天的输入日期。
返回¶
返回 1 到 7 之间的数字,表示其属于一周中的哪一天,其中 1 表示一周的第一天。例如,如果 1 月 1 日为星期三,则星期三 = 1,星期四 = 2,星期五 = 3,星期六 = 4,星期日 = 5,星期一 = 6,星期二 = 7。
使用示例¶
输入:
SELECT PUBLIC.TD_DAY_OF_WEEK_COMPATIBLE_UDF(DATE '2022-01-01'),
PUBLIC.TD_DAY_OF_WEEK_COMPATIBLE_UDF(DATE '2023-05-05');
输出:
1, 6
JAROWINKLER_UDF¶
定义¶
使用 Jaro-Winkler 算法计算两个字符串的相似程度。该算法给出的分数介于 0(完全不同)和 1(相同)之间。
PUBLIC.JAROWINKLER_UDF (string1 VARCHAR, string2 VARCHAR)
参数¶
VARCHAR 类型的 string1
要处理的文本
VARCHAR 类型的 string2
要处理的文本
返回¶
该函数返回 0 或 1。
使用示例¶
输入:
SELECT PUBLIC.JAROWINKLER_UDF('święta', 'swieta')
输出:
0.770000
YEAR_BEGIN_ISO_UDF¶
定义¶
UDF,用于计算给定日期的 ISO 年度的第一天。其工作原理是使用 DAYOFWEEKISO 函数和 PUBLIC.FIRST_DAY_JANUARY_OF_ISO_UDF,找到最接近该年度 1 月 1 日的星期一。该函数要么加上要么减去一定的天数才能找到这个星期一。
PUBLIC.YEAR_BEGIN_ISO_UDF(INPUT DATE)
参数¶
INPUT TIMESTAMP_TZ
根据 ISO 日历标准,代表当年 1 月 1 日的日期。
返回¶
根据 ISO 日历标准,一年的第一天。
使用示例¶
输入:
SELECT PUBLIC.YEAR_BEGIN_ISO_UDF(DATE '2022-01-01'),
PUBLIC.YEAR_BEGIN_ISO_UDF(DATE '2022-04-12');
输出:
2021-01-04, 2022-01-03
YEAR_PART_UDF¶
定义¶
从日期中提取年份并将其截断为指定的位数。
PUBLIC.YEAR_PART_UDF(INPUT TIMESTAMP_TZ, DIGITS INTEGER)
参数¶
INPUT TIMESTAMP_TZ
从中提取年份的日期。
DIGITS 一个整数,表示要显示的最大位数
输出中所需的小数位数。
返回¶
从指定日期提取年份部分。
使用示例¶
输入:
SELECT PUBLIC.YEAR_PART_UDF(DATE '2021-10-26', 3);
SELECT PUBLIC.YEAR_PART_UDF(DATE '2021-10-26', 2);
SELECT PUBLIC.YEAR_PART_UDF(DATE '2021-10-26', 1);
输出:
'021'
'21'
'1'
YEAR_WITH_COMMA_UDF¶
定义¶
从日期中提取年份,并在第一和第二位数字之间添加逗号。例如,如果年份是 2023 年,则返回“2,023”。
PUBLIC.YEAR_WITH_COMMA_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
从中提取年份的输入日期。
返回¶
以带有逗号分隔符的 varchar(文本)形式返回日期值的年份部分。
使用示例¶
输入:
SELECT PUBLIC.YEAR_WITH_COMMA_UDF(DATE '2021-10-26');
输出:
'2,021'
MONTHS_BETWEEN_UDF¶
定义¶
计算两个日期之间的月数
MONTHS_BETWEEN_UDF(FIRST_DATE TIMESTAMP_LTZ, SECOND_DATE TIMESTAMP_LTZ)
参数¶
FIRST_DATE 是一个包含日期和时间信息的时间戳列,支持时区 (TIMESTAMP_LTZ)
函数开始处理数据的初始日期。
SECOND_DATE TIMESTAMP_LTZ
定义何时停止计数的结束日期。
返回¶
两个日期之间的月数。
使用示例¶
输入:
SELECT MONTHS_BETWEEN_UDF('2022-02-14', '2021-02-14');
输出:
12
SECONDS_PAST_MIDNIGHT_UDF¶
定义¶
计算指定时间自午夜以来经过的秒数。
PUBLIC.SECONDS_PAST_MIDNIGHT_UDF(INPUT TIME)
参数¶
INPUT TIME
该函数计算自午夜 (00:00:00) 到当前时间所经过的总秒数。
返回¶
一个 varchar 值,表示自午夜以来经过的秒数。
使用示例¶
输入:
SELECT PUBLIC.SECONDS_PAST_MIDNIGHT_UDF(TIME'10:30:45');
输出:
'37845'
CHAR2HEXINT_UDF¶
定义¶
返回一个包含输入字符串中每个字符的十六进制(以 16 为基数)表示的字符串。
PUBLIC.CHAR2HEXINT_UDF(INPUT_STRING VARCHAR);
参数¶
INPUT_STRING 是一个 VARCHAR 类型的变量,用于存储文本数据。
需要转换的输入字符串。
返回¶
返回一个包含输入字符串的十六进制表示的字符串。
示例¶
输入:
SELECT CHAR2HEXINT('1234') from t1;
输出:
SELECT
PUBLIC.CHAR2HEXINT_UDF('1234') from
t1;
来自源函数的更多信息¶
函数文档可在 Teradata 文档 (https://docs.teradata.com/r/SQL-Functions-Expressions-and-Predicates/June-2020/String-Operators-and-Functions/CHAR2HEXINT) 中找到。
INTERVAL_ADD_UDF¶
定义¶
UDFs(用户定义的函数),用于处理间隔值和间隔类型的列引用间的减法运算。
PUBLIC.INTERVAL_ADD_UDF
(INPUT_VALUE1 VARCHAR(), INPUT_PART1 VARCHAR(30), INPUT_VALUE2 VARCHAR(), INPUT_PART2 VARCHAR(30), OP CHAR, OUTPUT_PART VARCHAR())
参数¶
VARCHAR 类型的 INPUT_VALUE1
将由系统处理的输入数据。
VARCHAR 类型的 INPUT_PART1
要使用的时间单位,例如“HOUR”。
INPUT_VALUE2 是 VARCHAR 数据类型参数。
引用列的名称,例如“INTERVAL_HOUR_TYPE”
INPUT_PART2 VARCHAR
分配给引用列的数据类型。
OP 字符
当前正在分析的符号或运算符。
OUTPUT_PART VARCHAR
返回值的数据类型。
返回¶
一个 varchar 值,表示减去两个时间间隔的结果。
迁移示例¶
输入:
CREATE TABLE INTERVAL_TABLE
(
INTERVAL_YEAR_TYPE INTERVAL YEAR
);
SELECT INTERVAL_YEAR_TYPE - INTERVAL '7' MONTH FROM INTERVAL_TABLE;
输出:
CREATE OR REPLACE TABLE INTERVAL_TABLE
(
INTERVAL_YEAR_TYPE VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
SELECT
PUBLIC.INTERVAL_ADD_UDF(INTERVAL_YEAR_TYPE, 'YEAR', '7', 'MONTH', '-', 'YEAR TO MONTH')
FROM
INTERVAL_TABLE;
DAY_OF_WEEK_LONG_UDF¶
定义¶
用户定义的函数 (UDF),用于将时间戳转换为当天的全名(例如,“星期一”、“星期二”等)。
PUBLIC.DAY_OF_WEEK_LONG_UDF(INPUT_DATE TIMESTAMP)
参数¶
INPUT_DATE 代表时间戳值
时间戳将转换为当天的完整名称(例如,“星期一”、“星期二”等)。
返回¶
当天的英文名称。
TD_WEEK_OF_CALENDAR_UDF¶
定义¶
用户定义的函数 (UDF),可直接取代 Teradata 的 TD_WEEK_OF_CALENDAR (https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/SQL-Date-and-Time-Functions-and-Expressions/Calendar-Functions/td_week_of_calendar) 函数,在 Snowflake 中提供相同的功能。
PUBLIC.TD_WEEK_OF_CALENDAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算自 1900 年 1 月 1 日以来经过的周数的日期。
返回¶
一个整数,表示 1900 年 1 月 1 日到指定日期之间的完整周数
迁移示例¶
输入:
SELECT TD_WEEK_OF_CALENDAR(DATE '2023-11-30')
输出:
SELECT
PUBLIC.TD_WEEK_OF_CALENDAR_UDF(DATE '2023-11-30');
WRAP_NEGATIVE_WITH_ANGLE_BRACKETS_UDF¶
定义¶
将负数转换为使用尖括号 (< >) 而不是减号 (-)。当原始 Teradata 格式字符串中存在 PR(括号)格式元素时,就会发生这种转换。
PUBLIC.WRAP_NEGATIVE_WITH_ANGLE_BRACKETS_UDF(INPUT NUMBER, FORMATARG VARCHAR)
参数¶
INPUT 是一个数值
将转换为文本字符串 (varchar) 的数值。
FORMATARG 是 VARCHAR 类型的参数,用于指定数据的格式。
格式参数指定如何将 INPUT 值转换为文本 (varchar) 表示形式。
返回¶
一个包含用尖括号 (< >) 括起来的负数的 varchar。
使用示例¶
输入:
SELECT PUBLIC.WRAP_NEGATIVE_WITH_ANGLE_BRACKETS_UDF(8456, '9999');
SELECT PUBLIC.WRAP_NEGATIVE_WITH_ANGLE_BRACKETS_UDF(-8456, '9999');
输出:
'8456'
'<8456>'
INSTR_UDF (STRING, STRING)¶
警告
这是一个用户定义的函数 (UDF),接受 两个 不同的参数集。
定义¶
查找 search_string 出现在 source_string 中的所有实例。
PUBLIC.INSTR_UDF(SOURCE_STRING STRING, SEARCH_STRING STRING)
参数¶
SOURCE_STRING 表示需要处理的输入字符串
将要搜索的文本。
SEARCH_STRING 是 STRING 类型的参数,用于指定要搜索的文本。
该函数将查找和匹配的文本模式。
返回¶
在源字符串中找到模式的索引位置(从位置 1 开始)。
使用示例¶
输入:
SELECT INSTR_UDF('INSTR FUNCTION','N');
输出:
2
TRANSLATE_CHK_UDF¶
定义¶
检查代码是否可以在不生成任何错误的情况下成功转换。
PUBLIC.TRANSLATE_CHK_UDF(COL_NAME STRING, SOURCE_REPERTOIRE_NAME STRING)
参数¶
COL_NAME 是一个表示列名称的字符串变量。
需要验证的列。
SOURCE_REPERTOIRE_NAME 是一个字符串参数,用于指定源目录的名称。
源集合或库的名称。
返回¶
0:转换成功完成,没有错误。NULL:未返回任何结果(null 值)。
字符串中第一个字符的位置导致转换错误。
使用示例¶
输入:
SELECT PUBLIC.TRANSLATE_CHK_UDF('ABC', 'UNICODE_TO_LATIN');
输出:
0
EXPAND_ON_UDF¶
备注
为了提高可读性,我们在此示例中简化了代码的某些部分。
定义¶
重现 Teradata 的 expand-on 函数的行为。
PUBLIC.EXPAND_ON_UDF(TIME STRING, SEQ NUMBER, PERIOD STRING)
参数¶
TIME 是一个将时间值存储为文本 (STRING) 的数据类型。
锚完全展开所需的时间。
SEQ 序列号
每行的值的计算顺序。
PERIOD:一个表示时间段的文本值
指定时间段的日期。
返回¶
一个 VARCHAR 值,用于定义如何计算 expand-on 子句中的扩展周期。
迁移示例¶
输入:
SELECT bg FROM table1 EXPAND ON pd AS bg BY ANCHOR ANCHOR_SECOND;
输出:
WITH
ExpandOnCTE AS
(
SELECT
PUBLIC.EXPAND_ON_UDF('ANCHOR_SECOND', VALUE, pd) bg
FROM
table1,
TABLE(FLATTEN(PUBLIC.ROW_COUNT_UDF(PUBLIC.DIFF_TIME_PERIOD_UDF('ANCHOR_SECOND', pd))))
)
SELECT
bg
FROM
table1,
ExpandOnCTE;
ROW_COUNT_UDF¶
定义¶
返回一个包含从 1 到 DIFF_TIME_PERIOD_UDF 返回的值之间的序列数的数组。
PUBLIC.ROW_COUNT_UDF(NROWS DOUBLE)
参数¶
NROWS 以十进制数 (DOUBLE) 表示数据集中的总行数
DIFF_TIME_PERIOD_UDF 函数返回的值。
返回¶
一个数组,用于确定重现 EXPAND ON 子句功能所需的行数。
使用示例¶
输入:
SELECT ROW_COUNT_UDF(DIFFTTIME_PERIOD('SECONDS','2022-11-26 10:15:20.000*2022-11-26 10:15:25.000'));
输出:
[1, 2, 3, 4, 5]
迁移示例¶
输入:
SELECT NORMALIZE emp_id, duration FROM project EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND;
输出:
WITH ExpandOnCTE AS
(
SELECT
PUBLIC.EXPAND_ON_UDF('ANCHOR_SECOND', VALUE, duration) bg
FROM
project,
TABLE(FLATTEN(PUBLIC.ROW_COUNT_UDF(PUBLIC.DIFF_TIME_PERIOD_UDF('ANCHOR_SECOND', duration))))
)
SELECT NORMALIZE emp_id,
duration
FROM
project,
ExpandOnCTE;
CENTURY_UDF¶
定义¶
计算给定日期所属的世纪。
PUBLIC.CENTURY_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于确定世纪的输入日期。
返回¶
以 varchar 形式返回给定日期所属世纪的编号。
使用示例¶
输入:
SELECT PUBLIC.CENTURY_UDF(DATE '1915-02-23');
输出:
'20'
TIME_DIFFERENCE_UDF¶
警告
此 UDF 已弃用,因为 Snowflake 现在提供内置的等效函数。有关更多详细信息,请参阅 TIMEDIFF 文档。
定义¶
计算两个给定时间戳之间的时间间隔。
PUBLIC.TIME_DIFFERENCE_UDF
(MINUEND TIME, SUBTRAHEND TIME, INPUT_PART VARCHAR)
参数¶
MINUEND:作为被减数的时间戳值
将从原始值中减去的时间。
SUBTRAHEND:将从另一个时间戳中减去的时间戳值
已减去的时间。
INPUT_PART 是一个 VARCHAR 类型的变量,用于存储输入数据。
EXTRACT_PART 是一个 VARCHAR 类型的变量,用于存储字符串中提取的部分。
从时间间隔中提取一个数值。
返回¶
代表特定时间的文本值 (VARCHAR)。
示例¶
输入:
select extract(day from (timestampColumn1 - timestampColumn2 day to hour)) from tableName;
输出:
SELECT
EXTRACT_TIMESTAMP_DIFFERENCE_UDF(timestampColumn1, timestampColumn2, 'DAY TO HOUR', 'DAY')
from
tableName;
INTERVAL_DIVIDE_UDF¶
定义¶
执行间隔除法计算的自定义函数 (UDF)。
PUBLIC.INTERVAL_DIVIDE_UDF
(INPUT_PART VARCHAR(30), INPUT_VALUE VARCHAR(), INPUT_DIV INTEGER)
参数¶
INPUT_PART 是一个 VARCHAR 类型的变量,代表数据的输入部分。
指定间隔类型的值,例如“YEAR TO MONTH”。
INPUT_VALUE VARCHAR
作为被除数的时间间隔。
INPUT_DIV 是一个整数值,表示输入除数。
将除以另一个数字的数字。
返回¶
输出是通过将时间间隔除以数值来计算的。
迁移示例¶
输入:
SELECT INTERVAL '6-10' YEAR TO MONTH / 8;
输出:
SELECT
PUBLIC.INTERVAL_DIVIDE_UDF('YEAR TO MONTH', '6-10', 8);
DAYNUMBER_OF_MONTH_UDF¶
定义¶
UDF 确定给定时间戳属于所在月的哪一天。它的功能与 Teradata 的 DAYNUMBER_OF_MONTH(DATE, 'ISO') 函数类似。
PUBLIC.DAYNUMBER_OF_MONTH_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
日期值,用于确定其属于一周中的哪一天。
返回¶
从 1 到 33(含)的整数。
示例¶
输入:
SELECT DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'ISO');
输出:
SELECT
PUBLIC.DAYNUMBER_OF_MONTH_UDF(DATE'2022-12-22');
LAST_DAY_DECEMBER_OF_ISO_UDF¶
定义¶
UDF(用户定义的函数),用于处理 12 月 31 日并返回相应的 ISO 年份。此函数用作 PUBLIC.YEAR_END_IDO_UDF 计算的一部分。
PUBLIC.LAST_DAY_DECEMBER_OF_ISO_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
要使用 ISO 年份格式获取 12 月的最后一天,请使用 12 月 31 日。
返回¶
以 ISO 年份格式表示的 12 月 31 日的日期。
使用示例¶
输入:
SELECT PUBLIC.LAST_DAY_DECEMBER_OF_ISO_UDF(DATE '2022-01-01');
输出:
2021-12-31
DATEADD_UDF¶
备注
为了提高可读性,我们在此示例中简化了代码的某些部分。
定义¶
计算两个日期之和的函数
PUBLIC.DATE_ADD_UDF(FIRST_DATE DATE, SECOND_DATE DATE)
参数¶
FIRST_DATE 表示类型为 DATE 的列
要包含的初始日期值。
SECOND_DATE 表示类型为 DATE 的列
将第二个日期值与 first_date 相加。
¶
返回¶
结果是通过将两个输入参数相加计算得出的日期。
示例¶
输入:
SELECT
CAST(CAST (COLUMNB AS DATE FORMAT 'MM/DD/YYYY') AS TIMESTAMP(0))
+
CAST (COLUMNA AS TIME(0) FORMAT 'HHMISS' )
FROM TIMEDIFF;
输出:
SELECT
PUBLIC.DATEADD_UDF(CAST(CAST(COLUMNB AS DATE) !!!RESOLVE EWI!!! /*** SSC-EWI-0033 - FORMAT 'MM/DD/YYYY' REMOVED, SEMANTIC INFORMATION NOT FOUND. ***/!!! AS TIMESTAMP(0)), PUBLIC.TO_INTERVAL_UDF(CAST(COLUMNA AS TIME(0)) !!!RESOLVE EWI!!! /*** SSC-EWI-0033 - FORMAT 'HHMISS' REMOVED, SEMANTIC INFORMATION NOT FOUND. ***/!!!))
FROM
TIMEDIFF;
JULIAN_TO_DATE_UDF¶
定义¶
一个用户定义的函数 (UDF),用于将儒略日期格式 (YYYYDDD) 转换为标准的公历日期 (YYYY-MM-DD)。
PUBLIC.JULIAN_TO_DATE_UDF(JULIAN_DATE CHAR(7))
参数¶
JULIAN_DATE CHAR – 一种字符数据类型,用于以儒略格式存储日期。
要从儒略格式转换的日期。
返回¶
返回儒略日期的日期表示,如果无法执行转换,则返回 null。
使用示例¶
输入:
SELECT JULIAN_TO_DATE_UDF('2022045');
输出:
'2022-02-14'
迁移示例¶
输入:
SELECT TO_DATE('2020002', 'YYYYDDD');
输出:
SELECT
PUBLIC.JULIAN_TO_DATE_UDF('2020002');
FIRST_DAY_JANUARY_OF_ISO_UDF¶
定义¶
ISO 日历年中一月的第一天,PUBLIC.YEAR_BEGIN_ISO_UDF 函数使用它来计算其结果。
FUNCTION PUBLIC.FIRST_DAY_JANUARY_OF_ISO_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
使用 ISO 日历年格式表示 1 月 1 日的日期。
返回¶
代表指定 ISO 日历年的 1 月 1 日的日期。
使用示例¶
输入:
SELECT PUBLIC.FIRST_DAY_JANUARY_OF_ISO_UDF(DATE '2022-01-01');
输出:
2021-01-01
TIMESTAMP_DIFFERENCE_UDF¶
定义¶
如何使用用户定义的函数减去两个日期 (UDF)
PUBLIC.TIMESTAMP_DIFFERENCE_UDF
(MINUEND TIMESTAMP, SUBTRAHEND TIMESTAMP, INPUT_PART VARCHAR)
Teradata 和 Snowflake 日期时间减法之间的区别¶
Teradata 和 Snowflake 使用不同的方法来计算日期和时间。它们在语法、输出数据类型和精度级别上都有不同。
语法: 在 Teradata 中,DATE、TIMESTAMP 和 TIME 减法使用减号和间隔来指定结果的格式。有关更多详细信息,请参阅 https://docs.teradata.com/r/w19R4KsuHIiEqyxz0WYfgA/7kLLsWrP0kHxbk3iida0mA (https://docs.teradata.com/r/w19R4KsuHIiEqyxz0WYfgA/7kLLsWrP0kHxbk3iida0mA)。Snowflake 使用三个函数以不同的方式处理这些操作:
DATEDIFF(适用于所有日期类型)
TIMESTAMPDIFF
TIMEDIFF 每个函数都需要两个日期进行比较,并需要返回日期部分。对于 DATE 类型,您还可以使用减号,其将以天为单位返回差值。
返回类型: Teradata 返回各种间隔类型(请参阅 https://www.docs.teradata.com/r/T5QsmcznbJo1bHmZT2KnFw/z~5iW7rYVstcmNYbd6Dsjg (https://www.docs.teradata.com/r/T5QsmcznbJo1bHmZT2KnFw/z~5iW7rYVstcmNYbd6Dsjg))。Snowflake 的函数返回一个表示单位数的整数。有关详细信息,请参阅 https://docs.snowflake.cn/en/sql-reference/functions/datediff.html
舍入: DATEDIFF 处理日期部分的方式可能会产生与 Teradata 不同的结果。查看 https://docs.snowflake.cn/en/sql-reference/functions/datediff.html#usage-notes 了解具体的舍入行为。
警告
执行日期计算时,由于舍入或时区差异,结果可能会相差一天。
参数¶
MINUEND:表示将作为被减数的时间戳值
用作减法起点的日期。
SUBTRAHEND 是将从另一个时间戳中减去的时间戳值。
该日期已移除。
INPUT_PART 是 VARCHAR 类型的变量(可变长度的字符串)
需要返回的部分。
返回¶
根据指定的 INPUT_PART 参数格式化字符串值。
示例¶
输入:
select (timestampColumn1 - timestampColumn2 YEAR) from tableName;
SELECT
(
PUBLIC.TIMESTAMP_DIFFERENCE_UDF(timestampColumn1, timestampColumn2, 'YEAR')) from
tableName;
FIRST_DAY_OF_MONTH_ISO_UDF¶
定义¶
用户定义的函数 (UDF) 以 ISO 格式 (YYYY-MM-DD) 返回给定月份的第一天。
PUBLIC.FIRST_DAY_OF_MONTH_ISO_UDF(YEAR NUMBER, MONTH NUMBER)
参数¶
YEAR 是一种数字数据类型,用于存储四位数的年份值。
代表日历年(例如 2023 年)的数值。
MONTH 代表月份的数值 (1-12)
代表日历月份的数值 (1-12)。
返回¶
以 ISO 格式 (YYYY-MM-DD) 返回当月的第一天。
示例¶
备注
此 UDF 是一个辅助函数,用于 DAYNUMBER_OF_MONTH_UDF 函数。
INT_TO_DATE_UDF¶
定义¶
将数值转换为日期的 UDF(Teradata 兼容函数)
PUBLIC.INT_TO_DATE_UDF(NUMERIC_EXPRESSION INTEGER)
参数¶
NUMERIC_EXPRESSION 表示计算结果为整数的数值或表达式
以特定格式表示日期的值,例如 YYYY-MM-DD
返回¶
转换为日期格式的数字。
示例¶
输入:
SELECT * FROM table1
WHERE date_column > 1011219
输出:
SELECT
* FROM
table1
WHERE date_column > PUBLIC.INT_TO_DATE_UDF( 1011219);
NULLIFZERO_UDF¶
定义¶
将数据中的零值替换为 NULL,以防止除零错误。
PUBLIC.NULLIFZERO_UDF(NUMBER_TO_VALIDATE NUMBER)
参数¶
NUMBER_TO_VALIDATE NUMBER
需要验证的数字。
返回¶
如果输入数字为零,则返回 null;否则,返回原始数字。
使用示例¶
SELECT NULLIFZERO_UDF(0);
输出:
NULL
DATE_LONG_UDF¶
定义¶
将日期转换为“星期几, 月份 DD, YYYY”格式(例如,“Monday, January 01, 2024”)。此格式与 Teradata 的 DL 日期格式元素相匹配。
PUBLIC.DATE_LONG_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
日期应以长日期格式显示(例如:“September 15, 2023”)。
返回¶
一个表示 Teradata DL 格式元素的 VARCHAR 数据类型。
使用示例¶
输入:
SELECT PUBLIC.DATE_LONG_UDF(DATE '2021-10-26');
输出:
'Tuesday, October 26, 2021'
TD_MONTH_OF_CALENDAR_UDF¶
定义¶
用户定义的函数 (UDF),可直接取代 Teradata 的 TD_MONTH_OF_CALENDAR (https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/SQL-Date-and-Time-Functions-and-Expressions/Calendar-Functions/td_month_of_calendar) 函数,提供相同的功能。
PUBLIC.TD_MONTH_OF_CALENDAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算自 1900 年 1 月 1 日以来经过的月数的日期。
返回¶
一个整数,表示 1900 年 1 月 1 日到指定日期之间的月数
迁移示例¶
输入:
SELECT TD_MONTH_OF_CALENDAR(DATE '2023-11-30')
输出:
SELECT
PUBLIC.TD_MONTH_OF_CALENDAR_UDF(DATE '2023-11-30');
MONTH_NAME_LONG_UDF¶
定义¶
一种用户定义的函数 (UDF),用于将时间戳转换为相应的完整月份名称。
PUBLIC.MONTH_NAME_LONG_UDF(INPUT_DATE TIMESTAMP)
参数¶
INPUT DATE
应转换为显示完整月份名称的时间戳。
返回¶
英文的月份名称。
TD_DAY_OF_CALENDAR_UDF¶
定义¶
一个用户定义的函数 (UDF),用于重现 Teradata 的 TO_DAY_OF_CALENDAR 功能。
PUBLIC.TD_DAY_OF_CALENDAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算自 1900 年 1 月 1 日以来经过的天数的日期。
返回¶
一个整数,表示 1900 年 1 月 1 日到 INPUT 日期之间的天数
迁移示例¶
输入:
SELECT td_day_of_calendar(current_date)
输出:
SELECT
PUBLIC.TD_DAY_OF_CALENDAR_UDF(CURRENT_DATE());
PERIOD_TO_TIME_UDF¶
定义¶
该函数将 Teradata PERIOD 值转换为 TIME 值,维持 Teradata 的类型转换行为。
PERIOD_TO_TIME_UDF(PERIOD_VAL VARCHAR(22))
参数¶
PERIOD_VAL 表示时间段值
需要转换的时间段。
返回¶
该函数返回一个表示 PERIOD 的 TIME 值。如果无法完成转换,则返回 null。
使用示例¶
输入:
SELECT PERIOD_TO_TIME_UDF(PERIOD_UDF(CURRENT_TIME()));
输出:
08:42:04
INSTR_UDF (STRING, STRING, DOUBLE, DOUBLE)¶
警告
此用户定义的函数 (UDF) 接受 四个 输入参数。
定义¶
查找 search_string 出现在 source_string 中的所有实例。
PUBLIC.INSTR_UDF(SOURCE_STRING STRING, SEARCH_STRING STRING, POSITION DOUBLE, OCCURRENCE DOUBLE)
参数¶
SOURCE_STRING 表示需要处理的输入字符串
将要搜索的文本字符串。
SEARCH_STRING 是您要搜索的文本值。
该函数将查找和匹配的文本模式。
POSITION DOUBLE – 一种数字数据类型,以双精度存储十进制数字。
文本中开始搜索的位置(从位置 1 开始)。
OCCURRENCE DOUBLE – 一种数字数据类型,表示事件发生的次数,存储为双精度浮点数。
文本中开始搜索的位置(从位置 1 开始)。
返回¶
在源字符串中找到指定文本的索引位置。
使用示例¶
输入:
SELECT INSTR_UDF('CHOOSE A CHOCOLATE CHIP COOKIE','CH',2,2);
输出:
20
ROUND_DATE_UDF¶
定义¶
一种用户定义的函数 (UDF),通过将时间部分舍入到指定单位 (UNIT_TO_ROUND_BY) 来处理 DATE_VALUE。此函数类似于 Teradata 的 ROUND(date) 函数。
PUBLIC.ROUND_DATE_UDF(DATE_TO_ROUND TIMESTAMP_LTZ, UNIT_TO_ROUND_BY VARCHAR(5))
参数¶
DATE_TO_ROUND TIMESTAMP_TZ(包含需要舍入的时区信息的时间戳值)
需要舍入的日期值。
UNIT_TO_ROUND_BY VARCHAR – 指定用于舍入的时间单位
用于舍入日期的时间单位。
返回¶
返回舍入到指定时间单位的日期。UNIT_TO_ROUND_BY 参数决定如何舍入日期。
迁移示例¶
输入:
SELECT ROUND(CURRENT_DATE, 'RM') RND_DATE
输出:
SELECT
PUBLIC.ROUND_DATE_UDF(CURRENT_DATE(), 'RM') RND_DATE;
SUBSTR_UDF (STRING, FLOAT, FLOAT)¶
警告
这是一个用户定义的函数 (UDF),接受 三个 参数。
定义¶
使用起始和结束位置从指定字符串中检索部分文本。
PUBLIC.SUBSTR_UDF(BASE_EXPRESSION STRING, START_POSITION FLOAT, LENGTH FLOAT)
参数¶
BASE_EXPRESSION 是一个定义基本表达式的字符串参数。
要从中提取一部分的源文本。
START_POSITION 是一个定义初始位置的浮点数。
要开始从字符串中提取字符的位置。
LENGTH 是一个表示长度值的浮点数。
要开始从字符串中提取字符的位置。
返回¶
必须包含的子字符串。
使用示例¶
输入:
SELECT
PUBLIC.SUBSTR_UDF('ABC', -1, 1),
PUBLIC.SUBSTR_UDF('ABC', -1, 2),
PUBLIC.SUBSTR_UDF('ABC', -1, 3),
PUBLIC.SUBSTR_UDF('ABC', 0, 1),
PUBLIC.SUBSTR_UDF('ABC', 0, 2);
输出:
'','','A','','A'
GETQUERYBANDVALUE_UDF (VARCHAR)¶
警告
这是一个用户定义的函数 (UDF),接受 一个 参数。
定义¶
从存储在交易、会话或配置文件查询区段中的名称-值对中返回一个值。
GETQUERYBANDVALUE_UDF(SEARCHNAME VARCHAR)
参数¶
SEARCHNAME VARCHAR – 一种 VARCHAR 类型的变量,用于存储搜索词或名称。– 一种 VARCHAR 类型的变量,用于存储搜索词或名称。
要在键值对中搜索的名称。
返回¶
会话查询区段的“名称”键值,如果不存在,则为 null。
使用示例¶
输入:
ALTER SESSION SET QUERY_TAG = 'user=Tyrone;role=security';
SELECT GETQUERYBANDVALUE_UDF('role');
输出:
security
迁移示例¶
输入:
SELECT GETQUERYBANDVALUE(1, 'group');
输出:
/** MSC-ERROR - MSCEWI2084 - TRANSACTION AND PROFILE LEVEL QUERY TAGS NOT SUPPORTED IN SNOWFLAKE, REFERENCING SESSION QUERY TAG INSTEAD **/
SELECT GETQUERYBANDVALUE_UDF('group');
TD_WEEK_OF_YEAR_UDF¶
定义¶
用户定义的函数 (UDF),用于计算给定日期在该年内所属的完整周数。此函数提供的功能与 Teradata 的 TD_WEEK_OF_YEAR 和 WEEKNUMBER_OF_YEAR 函数相同。
PUBLIC.TD_WEEK_OF_YEAR_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算周数的日期。
返回¶
一个数值,表示指定日期属于一年中的哪一周。
使用示例¶
输入:
SELECT PUBLIC.WEEK_OF_YEAR_UDF(DATE '2024-05-10'),
PUBLIC.WEEK_OF_YEAR_UDF(DATE '2020-01-03')
输出:
18, 0
EXTRACT_TIMESTAMP_DIFFERENCE_UDF¶
备注
为提高可读性,我们简化了代码示例,只显示相关程度最高的部分。
定义¶
从 MINUEND 中减去 SUBTRAHEND 的结果中检索“数据”部分
PUBLIC.EXTRACT_TIMESTAMP_DIFFERENCE_UDF
(MINUEND TIMESTAMP, SUBTRAHEND TIMESTAMP, INPUT_PART VARCHAR, EXTRACT_PART VARCHAR)
Teradata 和 Snowflake 日期时间提取之间的区别¶
Teradata 和 Snowflake 函数可能有不同的参数要求,并返回不同的数据类型。
参数: Teradata 和 Snowflake 的 EXTRACT 函数之间的主要区别在于 Snowflake 仅适用于日期和时间,而 Teradata 也支持间隔。有关更多详细信息,请参阅 Snowflake 的 EXTRACT 函数文档 和 Teradata 的 EXTRACT 函数文档 (https://docs.teradata.com/r/kmuOwjp1zEYg98JsB8fu_A/SIkE2wnHyQBnU4AGWRZSRw)。
返回类型: 这项函数的返回值有所不同:Teradata 的 EXTRACT 返回一个整数或小数 (8, 2),而 Snowflake 的 EXTRACT 则返回一个代表所请求的日期时间部分的数字。
Teradata 和 Snowflake 函数可能具有不同的输入参数和输出类型。
参数¶
MINUEND TIMESTAMP
用作减法起点的日期。
SUBTRAHEND:将从另一个时间戳中减去的时间戳值
该日期已移除。
INPUT_PART VARCHAR
格式化的 varchar 必须与原始请求的部分相匹配(与 TIMESTAMP_DIFERENCE INPUT_PART 相同),并且必须是以下内容之一:
'DAY TO HOUR''DAY TO MINUTE''DAY TO SECOND''DAY TO MINUTE''HOUR TO MINUTE''HOUR TO SECOND''MINUTE TO SECOND'
EXTRACT_PART 是一种 VARCHAR 数据类型,表示字符串中提取的部分。
提取的时间单位必须是以下值之一:“DAY”、“HOUR”、“MINUTE” 或 “SECOND”。请求的时间单位应在输入的时间间隔内。
返回¶
提取过程中包含的请求数。
示例¶
输入:
select extract(day from (timestampColumn1 - timestampColumn2 day to hour)) from tableName;
输出:
SELECT
EXTRACT_TIMESTAMP_DIFFERENCE_UDF(timestampColumn1, timestampColumn2, 'DAY TO HOUR', 'DAY')
from
tableName;
JSON_EXTRACT_DOT_NOTATION_UDF¶
定义¶
一种用户定义的函数 (UDF),允许您使用点表示法查询 JSON 对象,类似于在 JavaScript 或 Python 中访问嵌套属性的方式。
JSON_EXTRACT_DOT_NOTATION_UDF(JSON_OBJECT VARIANT, JSON_PATH STRING)
Teradata JSON 实体引用(点表示法)和 Snowflake JSON 查询方法之间的区别。¶
Teradata 和 Snowflake 使用不同的方法来遍历 JSON 数据。Teradata 使用基于 JavaScript 的方法,包括点表示法、数组索引以及通配符访问和双点表示法等特殊运算符。相比之下,Snowflake 的 JSON 遍历功能更为有限,仅支持直接成员访问和数组索引。
参数¶
JSON_OBJECT:一种表示 JSON 对象的数据类型,可以包含不同数据类型的嵌套键值对。
包含要提取的值的 JSON 对象。
JSON_PATH:一个字符串参数,用于指定从 JSON 文档中提取数据的路径
在 JSON_OBJECT 中可以找到值的位置,使用 JSON 路径表示法指定。
返回¶
JSON_OBJECT 中与指定 JSON_PATH 匹配的数据元素。
迁移示例¶
输入:
SELECT CAST(varcharColumn AS JSON(2000))..name FROM variantTest;
输出:
SELECT
JSON_EXTRACT_DOT_NOTATION_UDF(CAST(varcharColumn AS VARIANT), '$..name')
FROM
variantTest;
WEEK_OF_MONTH_UDF¶
定义¶
计算特定日期属于该月的哪一周。
PUBLIC.WEEK_OF_MONTH_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于确定其属于该月的哪一周的日期。
返回¶
一个 VARCHAR 列,显示特定日期属于当月的哪一周。
使用示例¶
输入:
SELECT PUBLIC.WEEK_OF_MONTH_UDF(DATE '2021-10-26');
输出:
'4'
DAYNAME_LONG_UDF (TIMESTAMP_TZ)¶
警告
这是一个用户定义的函数 (UDF),接受 一个 参数。
定义¶
一个 UDF,创建 DAYNAME_LONG_UDF 函数的变体,该函数返回首字母大写的星期数名称(默认格式)。
PUBLIC.DAYNAME_LONG_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
您想要用来获取星期几的日期。
返回¶
返回一个包含一周中某一天全名的字符串。
使用示例¶
输入:
SELECT PUBLIC.DAYNAME_LONG_UDF(DATE '2022-06-30');
输出:
'Thursday'
INTERVAL_TO_MONTHS_UDF¶
定义¶
将时间间隔转换为月。
PUBLIC.INTERVAL_TO_MONTHS_UDF
(INPUT_VALUE VARCHAR())
参数¶
INPUT_VALUE VARCHAR
要更改为月的时间段。
返回¶
要处理的月数,指定为整数。
GETQUERYBANDVALUE_UDF (VARCHAR, FLOAT, VARCHAR)¶
警告
此用户定义的函数 (UDF) 接受三个参数。
定义¶
从存储在交易、会话或配置文件查询区段中的名称-值对中返回一个值。该值与查询区段中的特定名称相关联。
GETQUERYBANDVALUE_UDF(QUERYBAND VARCHAR, SEARCHTYPE FLOAT, SEARCHNAME VARCHAR)
参数¶
QUERYBAND 是一种 VARCHAR 数据类型,用于存储查询区段信息。
查询区段将交易、会话和配置文件查询区段合并为一个字符串。
SEARCHTYPE 是一种浮点数数据类型。
搜索匹配对的最大深度。
0 表示与任意输入相匹配的通配符值。
交易代表数据库中的单个工作单元。
会话对象代表与 Snowflake 的连接。
3 = 创建配置文件。
SEARCHNAME VARCHAR
要在键值对中搜索的名称。
返回¶
返回层次结构中指定级别的“名称”键的值。如果未找到任何值,则返回 null。
使用示例¶
输入:
SELECT GETQUERYBANDVALUE_UDF('=T> account=Matt;user=Matt200; =S> account=SaraDB;user=Sara;role=DbAdmin;', 0, 'account');
SELECT GETQUERYBANDVALUE_UDF('=T> account=Matt;user=Matt200; =S> account=SaraDB;user=Sara;role=DbAdmin;', 2, 'account');
SELECT GETQUERYBANDVALUE_UDF('=T> account=Matt;user=Matt200; =S> account=SaraDB;user=Sara;role=DbAdmin;', 0, 'role');
SELECT GETQUERYBANDVALUE_UDF('=T> account=Matt;user=Matt200; =S> account=SaraDB;user=Sara;role=DbAdmin;', 1, 'role');
输出:
Matt
SaraDB
DbAdmin
NULL
迁移示例¶
输入:
SELECT GETQUERYBANDVALUE('=T> account=Matt;user=Matt200; =S> account=SaraDB;user=Sara;role=DbAdmin;', 0, 'account')
输出:
WITH
--** MSC-WARNING - MSCEWI2078 - THE EXPAND ON CLAUSE FUNCTIONALITY IS TRANSFORMED INTO A CTE BLOCK **
ExpandOnCTE AS
(
SELECT
PUBLIC.EXPAND_ON_UDF('ANCHOR_SECOND', VALUE, duration) bg
FROM
project,
TABLE(FLATTEN(PUBLIC.ROW_COUNT_UDF(PUBLIC.DIFF_TIME_PERIOD_UDF('ANCHOR_SECOND', duration))))
)
SELECT NORMALIZE emp_id,
duration
FROM
project,
ExpandOnCTE;
JULIAN_DAY_UDF¶
定义¶
计算 Julian 日数,该数字表示自公元前 (BCE) 4713 年 1 月 1 日以来的连续天数。Julian 日用于天文学和日历计算。
PUBLIC.JULIAN_DAY_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
将转换为 Julian 日数的日期。
返回¶
一个 varchar 值,表示计算出的 Julian 日期。
使用示例¶
输入:
SELECT PUBLIC.JULIAN_DAY_UDF(DATE '2021-10-26');
输出:
'2459514'
WEEKNUMBER_OF_MONTH_UDF¶
定义¶
从给定日期确定月份。
PUBLIC.WEEKNUMBER_OF_MONTH_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算月数的日期。
返回¶
代表给定日期的月份 (1-12) 的数值。
使用示例¶
输入:
SELECT PUBLIC.WEEKNUMBER_OF_MONTH_UDF(DATE '2022-05-21')
输出:
3
JSON_EXTRACT_UDF¶
定义¶
一个用户定义的函数 (UDF),用于模仿 JSONExtract、JSONExtractValue 和 JSONExtractLargeValue 函数的行为。此 UDF 允许您从 JSON 对象中提取多个值。
JSON_EXTRACT_UDF(JSON_OBJECT VARIANT, JSON_PATH STRING, SINGLE_VALUE BOOLEAN)
参数¶
JSON_OBJECT 是一种以结构化格式存储 JSON 格式数据的数据类型。
包含要提取的值的 JSON 对象。
JSON_PATH:一个字符串,用于指定从 JSON 文档中提取数据的路径
在 JSON_OBJECT 中可以找到所需值的位置,使用 JSON 路径表示法指定。
SINGLE_VALUE:一个布尔标志,用于指示是返回单个值还是多个值。
BOOLEAN 参数:当设置为 true 时,返回单个值(JSONExtractValue 和 JSONExtractLargeValue 函数必需)。当设置为 false 时,返回值数组(用于 JSONExtract)。
返回¶
在 JSON 对象的指定 JSON 路径中找到的数据值。
迁移示例¶
输入:
SELECT
Store.JSONExtract('$..author') as AllAuthors
FROM BookStores;
输出:
SELECT
JSON_EXTRACT_UDF(Store, '$..author', FALSE) as AllAuthors
FROM
BookStores;
COMPUTE_EXPAND_ON_UDF¶
定义¶
确定如何根据指定的时间段类型扩展数据。
PUBLIC.COMPUTE_EXPAND_ON_UDF(TIME STRING, SEQ NUMBER, PERIOD TIMESTAMP, PERIODTYPE STRING)
参数¶
TIME STRING
锚点中使用的时间戳。
SEQ 序列号
每行计算的执行顺序。
PERIOD 表示指明特定时间点的时间戳值。
指定时间段的日期。
PERIODTYPE 是一个字符串值,用于定义时间段的类型。
用于计算的时间段(“BEGIN”或“END”)
返回¶
一个时间戳,表示何时处理 EXPAND-ON 操作中的每一行。
示例¶
警告
此 UDF 是一个派生函数,扩展了 EXPAND_ON_UDF 的功能。
WEEK_NUMBER_OF_QUARTER_UDF¶
定义¶
返回指定日期在当前季度内所属的周数。此函数使用 ISO 日历系统,遵循与 Teradata 的 WEEKNUMBER_OF_QUARTER(DATE, 'ISO') 函数相同的行为。
PUBLIC.WEEK_NUMBER_OF_QUARTER_UDF(INPUT TIMESTAMP_TZ)
参数¶
INPUT TIMESTAMP_TZ
用于计算其属于该季度的哪一周的日期。
返回¶
一个整数,表示引用的是季度中的哪一周 (1-13)。
使用示例¶
输入:
SELECT WEEK_NUMBER_OF_QUARTER_UDF(DATE '2023-01-01'),
WEEK_NUMBER_OF_QUARTER_UDF(DATE '2022-10-27')
输出:
1, 4
YEAR_END_ISO_UDF¶
定义¶
用户定义的函数 (UDF),使用 ISO 日历标准计算给定日期当年的最后一天,类似于 Teradata 的 TD_YEAR_END 函数。
PUBLIC.YEAR_END_ISO_UDF(INPUT date)
参数¶
INPUT DATE
根据 ISO 日历标准,该日期代表当年的最后一天。
返回¶
根据 ISO 日历系统,当年的最后一天。
使用示例¶
输入:
SELECT PUBLIC.YEAR_END_ISO_UDF(DATE '2022-01-01'),
PUBLIC.YEAR_END_ISO_UDF(DATE '2022-04-12');
输出:
2022-01-02, 2023-01-01
INSERT_CURRENCY_UDF¶
定义¶
在数字的第一位数字前直接插入货币符号,确保货币符号和数字之间没有空格或符号。
PUBLIC.INSERT_CURRENCY_UDF(INPUT VARCHAR, CURRENCYINDEX INTEGER, CURRENCYVALUE VARCHAR)
参数¶
INPUT VARCHAR
转换需要货币格式的数值时,TO_CHAR 的输出。
CURRENCYINDEX 是一个整数值,代表一种货币的指数。
应在数组中插入货币的位置。
CURRENCYVALUE:一个存储货币值的 VARCHAR 字段
将用作货币值的文本。
返回¶
一个 varchar 字段,其中包含定义位置的货币文本。
使用示例¶
输入:
SELECT PUBLIC.INSERT_CURRENCY_UDF(to_char(823, 'S999999'), '1', 'CRC');
输出:
'+CRC823'
INSTR_UDF (STRING, STRING, INT)¶
警告
此用户定义的函数 (UDF) 接受三个参数。
定义¶
查找 search_string 出现在 source_string 中的所有实例。
PUBLIC.INSTR_UDF(SOURCE_STRING STRING, SEARCH_STRING STRING, POSITION INT)
参数¶
SOURCE_STRING 表示将用作输入的字符串值
将要搜索的文本。
SEARCH_STRING 是您要搜索的文本值。
该函数将查找和匹配的文本模式。
POSITION 是一个整数数据类型,表示序列中的位置。
在文本中开始搜索的位置(从位置 1 开始)。
返回¶
原始字符串中找到匹配项的位置。
使用示例¶
输入:
SELECT INSTR_UDF('FUNCTION','N', 3);
输出:
8