【问题标题】:Converting date set in 'DDMMYYYY'd format in Teradata在 Teradata 中转换以“DDMMYYYY”格式设置的日期
【发布时间】:2017-09-28 23:58:14
【问题描述】:

我有一个现有的 SAS 程序,它读取各种宏日期变量,并且我使用这些变量作为我在 Teradata 中运行查询的参数之一。

其中一个宏变量被格式化为DDMMYYYY,我想把它转换成Teradata可以读取的格式;我尝试了以下查询,但它似乎不起作用,有人能指出什么问题吗?

ME_DT (Teradata date variable) = CAST(CAST(&QEOP AS DATE FORMAT 'DDMMYYYY'd) AS DATE FORMAT 'YYYY-MM-DD')

其中 &QEOP 是一个宏日期变量。

【问题讨论】:

  • 宏变量包含什么?为什么你有两个 CAST() 函数?为什么内部 CAST() 函数的格式字符串后有小写的 d?您从 Teradata 收到了哪些错误消息?

标签: sql date teradata


【解决方案1】:

Teradata 需要在字符串周围加上单引号。对象名称周围使用双引号。通常你可以在表单中使用日期文字

'2017-05-01'

因此,如果您在宏变量中有 SAS 日期值:

%let mydate="01MAY2017"d ;

您可以结合使用 PUTN() 函数和一些宏引用来生成值。最好去掉宏引用。

%let tddate=%unquote(%bquote('%sysfunc(putn(&mydate,yymmdd10))'));

然后您的 Teradata 代码可以像这样简单地与现有的日期变量进行比较。

where ME_DT = &tddate

或者如果您想确保它知道您的意思是日期而不是字符串文字,请添加 DATE 关键字。

values (DATE &tddate)

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多