地震会商技术系统地震数据专家[DataEQ]

DatistEQ之几个函数技巧

2020-10-27  本文已影响0人  了无_数据科学

1、DateBetween函数

DateBetween函数,用于判断一个时刻是否介于一个时间段之内。
可用来取代DateBefore与DateAfter函数组合,表达式更为直接,逻辑更为清晰。

优化前:
DateBefore( RiQi , $_endtime_ ) and DateAfter( RiQi , AddDays( $_endtime_ , -7 ) )

优化后:
DateBetween( RiQi , DateTime2( $_endtime_ , '-7天' ) , $_endtime_ )

2、DateTime2函数

DateTime2、DateTime3提供更为简洁的时间推算方式,可用于取代很多日期型计算与格式化显示函数。【参考文章:DatistEQ之DateTime2与DateTime3函数

优化前:
CreateDate( Year( Now() ) , 1 , 1 )

优化后:
DateTime2('now','年初')

输出:
2020-01-01 00:00:00.000
流程变量:
_endtime_: 2020/5/6 23:59:59

优化前:
RiQi: FirstDayOfYear( Addyears( $_endtime_ , -3 ) ) 
RiQi2:LastDayOfYear( $_endtime_  ) 
year:  SubStrBetween( RiQi , 0 , 4 )
month: SubStrBetween( RiQi , 5 , 7 )
day:   SubStrBetween( RiQi , 8 , 10 )
year2: SubStrBetween( RiQi2 , 0 , 4 )
'-R' || year || '-' || month || '-' || day || 'T00:00:00/' || ToString(ToInteger(year2)+1) || '-01-01'|| 'T00:00:00/1/6'

优化后:
DateTime3('-Ryyyy-MM-ddT00:00:00',$_endtime_ ,'-3年','年初') || DateTime3('/yyyy-01-01T00:00:00/1/6',$_endtime_ ,'+1年')

输出:
-R2017-01-01T00:00:00/2021-01-01T00:00:00/1/6
流程变量:
_endtime_: 2020/5/6 23:59:59

优化前:
format_DateTime( FirstDayOfNextYear( $_endtime_ )  , 'yyyy-MM-dd HH:mm:ss' )

优化后:
DateTime3('yyyy-MM-dd HH:mm:ss',$_endtime_,'1年','年初')

输出:
2021-01-01 00:00:00

3、F函数
通过表达式占位符的方式,格式化输出子符串。
格式:F('文字{表达式: 格式}文字')
说明:在文字中间以{}括起表达式为基本语法;其中格式与表达式的数据类型有关,请注意数据类型以便于获得正确的输出结果。若输出特殊字符“{”以“{{”表示,“}”以“}}”表示。

多个字符串拼接时,使用F函数,减少||连接字符,表达更为简捷。【参考文章:DatistEQ之F函数

优化前:
'本周全球共发生' || ToString(ID) || '次7.0级以上地震。'

优化后:
F('本周全球共发生{ID}次7.0级以上地震。')

输出:
本周全球共发生2次7.0级以上地震。
优化前:
',最大地震为' || ToString( Year( RiQi_最后一个 ) ) || '年' || ToString( Month( RiQi_最后一个 ) ) || '月' || ToString( Day( RiQi_最后一个 ) )  || '日在' || DiMing_最后一个 || '发生的'|| ToString( ZhenJiZhi_最后一个 )  || '级地震。'

优化后:
F(',最大地震为{RiQi_最后一个:D}在{DiMing_最后一个}发生的{ZhenJiZhi_最后一个}级地震。 ')

输出:
,最大地震为2020年10月27日在安阳发生的3级地震。 
优化前:
SubStr( 开始时间 , 1 , 10 )  || 'T' || SubStr( 开始时间 , 12 , 8 ) || '/'|| SubStr( 结束时间, 1 , 10 )  || 'T' || SubStr( 结束时间 , 12 , 8 )|| "/0/"||ToString((floor( @max(频度)/10)+1) * 10 )

优化后:
F('{开始时间:yyyy-HH-ddTHH:mm:ss}/{结束时间:yyyy-HH-ddTHH:mm:ss}/0/{ceil( @max(频度)/10.0) *10}')
注:开始时间、结束时间字段必须是日期型;@max(频度)/10.0中10写成10.0意为小数相除,系统中整数相除和小数相除获得结果是不同。

输出:
2017-00-01T00:00:00/2021-00-01T00:00:00/0/50

4、HasSubStringsOR函数

HasSubStringsOR是HasSubString升级版,可省去大量的函数名称的重复。

优化前:
HasSubString( DiMing , '北京' ) OR HasSubString( DiMing , '天津' ) OR HasSubString( DiMing , '上海' ) OR HasSubString( DiMing , '香港' )

优化后:
HasSubStringsOR( DiMing ,'北京', '天津','上海','香港' )
上一篇下一篇

猜你喜欢

热点阅读