将oracle varchar date转换为变量转换为linux date

时间:2014-06-05 11:59:42

标签: sql linux bash date varchar

我正在使用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给了我一个极其巨大且不太可能的价值。

1 个答案:

答案 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