You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 1530130567 <15...@qq.com> on 2019/12/16 07:51:02 UTC

FlinkSQL中关于TIMESTAMPDIFF函数官网E.g的疑问

各位大佬好:
&nbsp; &nbsp;由于业务处理逻辑需要计算两个日期的时间差,按照惯例打开官网,查看buildin Functions,ctrC, ctrV,跑起来没问题!

&nbsp; 然后我就改了一下:
&nbsp;&nbsp;TIMESTAMPDIFF(DAY, TIMESTAMP time1,TIMESTAMP time2)
&nbsp; SQL validate报错!
&nbsp; 然后我又改了一下:
&nbsp; TIMESTAMPDIFF(DAY, cast(time1 as timestamp),cast(time2 as timestamp))
&nbsp; 通过了!


&nbsp; 我有点疑惑,TIMESTAMP是不是只适用于固定的字符串,而不能用列名这种变量?
&nbsp;

Re: FlinkSQL中关于TIMESTAMPDIFF函数官网E.g的疑问

Posted by jingjing bai <ba...@gmail.com>.
不知道你的版本是什么,
在1.9中, 申明为TIMESTAMP类型的属性,需要是 格式化为YYYY-MM-DD'T'HH:mm:ss.SSS'Z'
不过你可以从外部传入13位时间戳,也可以转换成TIMESTAMP,    比如DDL中定义

CREATE TABLE `t` (
   ctm TIMESTAMP,
) WITH (
  'format.schema' = 'ROW<ctm LONG>'
)"
。如果数据源也要定义为TIMESTAMP类型,则通过下面方式去定义外部数据源格式:

DateTimeFormatter t = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_DATE)
        .appendLiteral('T')
        .append(new DateTimeFormatterBuilder()
                .appendPattern("HH:mm:ss")
                .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
                .appendPattern("'Z'")
                .toFormatter())
        .toFormatter();

用这个结构去格式化时间类型


Zhenghua Gao <do...@gmail.com> 于2019年12月16日周一 下午7:42写道:

> 1) ML里直接发截图无法展示,可以用第三方图床,然后链接过来。
> 2) 请确认 time1/time2 类型是否是 TIMESTAMP
> 3) 文档中的 TIMESTAMP '2003-01-02 10:00:00' 代表标准SQL的时间常量(timestamp literal),你的
> TIMESTAMP time1 无法被视作时间常量。
>
> *Best Regards,*
> *Zhenghua Gao*
>
>
> On Mon, Dec 16, 2019 at 3:51 PM 1530130567 <15...@qq.com> wrote:
>
> > 各位大佬好:
> >    由于业务处理逻辑需要计算两个日期的时间差,按照惯例打开官网,查看buildin Functions,ctrC, ctrV,跑起来没问题!
> >
> >   然后我就改了一下:
> >   TIMESTAMPDIFF(DAY, TIMESTAMP time1,TIMESTAMP time2)
> >   SQL validate报错!
> >   然后我又改了一下:
> >   TIMESTAMPDIFF(DAY, cast(time1 as timestamp),cast(time2 as timestamp))
> >   通过了!
> >
> >   我有点疑惑,TIMESTAMP是不是只适用于固定的字符串,而不能用列名这种变量?
> >
> >
>

Re: FlinkSQL中关于TIMESTAMPDIFF函数官网E.g的疑问

Posted by Zhenghua Gao <do...@gmail.com>.
1) ML里直接发截图无法展示,可以用第三方图床,然后链接过来。
2) 请确认 time1/time2 类型是否是 TIMESTAMP
3) 文档中的 TIMESTAMP '2003-01-02 10:00:00' 代表标准SQL的时间常量(timestamp literal),你的
TIMESTAMP time1 无法被视作时间常量。

*Best Regards,*
*Zhenghua Gao*


On Mon, Dec 16, 2019 at 3:51 PM 1530130567 <15...@qq.com> wrote:

> 各位大佬好:
>    由于业务处理逻辑需要计算两个日期的时间差,按照惯例打开官网,查看buildin Functions,ctrC, ctrV,跑起来没问题!
>
>   然后我就改了一下:
>   TIMESTAMPDIFF(DAY, TIMESTAMP time1,TIMESTAMP time2)
>   SQL validate报错!
>   然后我又改了一下:
>   TIMESTAMPDIFF(DAY, cast(time1 as timestamp),cast(time2 as timestamp))
>   通过了!
>
>   我有点疑惑,TIMESTAMP是不是只适用于固定的字符串,而不能用列名这种变量?
>
>