sql - 将读入变量的oracle varchar日期转换为linux日期

标签 sql bash

我正在使用 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/

相关文章:

sql - BigQuery 在标准模式下使用 regex_extract_all 选择别名

sql - 如何处理单列数据库中的重复条目?

bash - 如何使用 sed 或 perl 增加和查找/替换数字

bash - 如何执行以引号和星号存储为字符串的bash命令

sql - 选择的 Where 子句 - 非 Ascii 字符?

SQL:计算学生就读的不同学校的数量

mysql - 如何加快对任何列子集的按计数分组查询?

python - 即使在重新启动 mac 终端后,我的 .bash_profile 更改也没有发生,我该怎么办?

bash - 如何从 bash shell 脚本中的一行中提取一个单词

Bash 在 printf 的格式字符串的开头使用 ---(三破折号)