我正在使用BASH中的sql查询从oracle表中读取日期'VARCHAR(14)'
到变量中。我想将该日期(例如20140611120520
)与系统日期进行比较。如果变量日期是系统日期的15分钟或更早,我需要启动另一个程序。
这是我的问题:
Get_einlag_time=`sqlplus ips_osmr/ips_osmr << eof | awk ' $1 == "This" { print $2 } '
select 'This ' || DZ_EINLAG
from LAG_SPI
where C_STATUS like '%E%' ;
eof
`
$Get_einlag_time
- 可能会导致多个日期与空格隔开
(例如20140411141231 20140605075650
)
然后我用For GET_TIME in $Get_einlag_time
循环逐个读取这个变量的日期,并将它们与系统日期进行比较。
现在我在$GET_TIME
中有这个日期值,但我无法进行日期比较,因为我得到了无效的日期&#39;来自这个变量。
在我放弃寻求专家意见之前,这是我最近的转换尝试: - )
echo "time read from Get_einlag_time is $GET_TIME"
EINLAG_TIME=$(date +%Y%m%d -d "$GET_TIME")
EINLAG_CHK=$(date -d "$EINLAG_TIME+15 Minutes" +%Y%m%d%H%M%S)
EINLAG_SEC=$(date -d "$EINLAG_TIME" +%s)
COMPARE_TIME=$(date +%Y%m%d%H%M%S)
COMP_SEC=$(date +%s)
$EINLAG_SEC
转化后的%s给了我一个极其巨大且不太可能的价值。
答案 0 :(得分:0)
也许你这样做:
SELECT CAST ('This ' AS TIMESTAMP) || DZ_EINLAG AS This
from LAG_SPI
where C_STATUS like '%E%' ;
不确定语法是否有效但你明白了。
如果它不起作用,你可以参考这里正确获取unix时间戳:
Convert timestamp datatype into unix timestamp Oracle
实际可能的解决方案:
GET_TIME=${R:0:4}/${R:4:2}/${R:6:2}\ ${R:8:2}:${R:10:2}:${R:12:2} ## Where R is like 20140411141231