使用常量日期字符串替换SQL字符串中的静态子字符串

问题描述 投票:0回答:1

我有一个软件,它有内置的代码处理器并支持shell脚本。我在一个文件中有多个SQL字符串,将逐个通过软件处理,某些子字符串常量的值将是在不更改包含原始SQL的原始文件的情况下被该软件覆盖。您可以在运行时将替换参数传递给该软件。

下面是其中一个SQL的示例sed:

echo " select * from TABLE where   DATE(TSP_DATE) between (CURRENT DATE -1 DAY) AND (CURRENT DATE)" | sed -e 's/CURRENT DATE - 1 DAY/'08/30/2018'/; s CURRENT DATE/'08/31/2018'/

我想替换子字符串

当前日期 - 1天

与'08 / 30/2018'和

当前的日期

使用一个命令使用'08 / 31/2018'。日期字符串包括引号。

当我运行上面的脚本时,我得到以下错误:

sed:-e表达式#1,char 29:'s'的未知选项

此致,Ankit

shell unix sed
1个回答
1
投票

不确定,如果你想实现一个解决方案,那就更复杂了。

无论您使用什么DBMS,我都非常确定它具有当前日期的功能。因此,您不必在shell脚本中执行此操作。

例如,当您使用MySQL时,您可以简单地使用此查询:

select * from TABLE where DATE(TSP_DATE) between CURDATE() - INTERVAL 1 DAY AND CURDATE();

当你想用sed做它时,你可以这样做:

echo "select * from TABLE where   DATE(TSP_DATE) between (CURRENT DATE -1 DAY) AND (CURRENT DATE)" | sed "s#CURRENT DATE -1 DAY#'08/30/2018'#;s#CURRENT DATE#'08/31/2018'#"

作为分隔符,您可以选择任何您想要的。当你选择/以外的东西时,你不必一直逃脱它,当你在替换字符串中使用它时。

© www.soinside.com 2019 - 2024. All rights reserved.