Teradata 中是否有一个函数,通过将日期、月份和年份作为参数来“生成”日期?因此,如果我有整数参数 p1_day、p2_month 和 p3_year(顺便说一下,它们是属性),是否有类似的函数
date_function (p1_day, p2_month, and p3_year) -> for example '2013-12-11'
Teradata 中是否有一个函数,通过将日期、月份和年份作为参数来“生成”日期?因此,如果我有整数参数 p1_day、p2_month 和 p3_year(顺便说一下,它们是属性),是否有类似的函数
date_function (p1_day, p2_month, and p3_year) -> for example '2013-12-11'
在 TD13.10+ 中,您可以创建一个简单的 SQL UDF:
-- (year, month, day) to date, "invalid date" error if no valid date
REPLACE FUNCTION ymd_to_date(y INTEGER, m INTEGER, d INTEGER)
RETURNS DATE
SPECIFIC ymd_to_date
RETURNS NULL ON NULL INPUT
CONTAINS SQL
DETERMINISTIC
COLLATION INVOKER
INLINE TYPE 1
RETURN
((y - 1900) * 10000 + (m * 100) + d (DATE))
迪特
teradata 中的一个示例:
BTEQ -- Enter your SQL request or BTEQ command:
sel cast ('11'||'-'||'12'||'-'||'12' as date format 'dd-mm-yy');
sel cast ('11'||'-'||'12'||'-'||'12' as date format 'dd-mm-yy');
*** Query completed. One row found. One column returned.
*** Total elapsed time was 1 second.
(((('11'||'-')||'12')||'-')||'12')
----------------------------------
11-12-12
因此,您可以通过以下查询简单地实现您想要的结果:
sel cast (cast(p1_day as char(2))||'-'||cast(p2_month as char(2))||'-'||
cast(p3_year as char(2)) as date format 'dd-mm-yy');
PS:teradata 中似乎没有任何此类内置功能。
据我所知,没有预定义的日期函数可以传递整数并返回日期..但是你可以写你知道 UDF..
要添加到 Deiter 的函数,请查看以下查询。Teradata 将日期存储为具有 1900 年偏移量的整数。
SELECT CAST(CURRENT_DATE AS INTEGER);
---- 1150818
SELECT CURRENT_DATE;
--- 2015-08-18
---- the format of storage is (<year> - 1900)mmdd
SELECT (2015 -1900)*100000 + (8 * 100)+ 18;
------ 1150818
从 1900 年开始的 115 年,月份之后是日期。