我正在使用 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
中有这个日期值,但我无法进行日期比较,因为我从此变量中得到“无效日期”。
这是我在放弃寻求专家建议之前最新的转换尝试:-)
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 给了我一个极其巨大且不太可能的值。
最佳答案
也许你会这样做:
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
关于sql - 将读入变量的oracle varchar日期转换为linux日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059668/