Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 用常量日期字符串替换SQL字符串中的静态子字符串_Shell_Unix_Sed - Fatal编程技术网

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

Shell 用常量日期字符串替换SQL字符串中的静态子字符串,shell,unix,sed,Shell,Unix,Sed,我有一个内置代码处理器并支持shell脚本的软件。我在一个文件中有多个SQL字符串,这些字符串将通过软件逐个处理,并且某些子字符串常量的值将被该软件覆盖,而不会更改包含原始SQL的原始文件。您可以在运行时将替换参数传递给该软件 下面是其中一个SQL的sed示例: echo " select * from TABLE where DATE(TSP_DATE) between (CURRENT DATE -1 DAY) AND (CURRENT DATE)" | sed -e 's/CURREN

我有一个内置代码处理器并支持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天

“2018年8月30日”和

当前日期

“2018年8月31日”使用一个命令。日期字符串包括引号

当我运行上述脚本时,出现以下错误:

sed:-e表达式1,字符29:未知的“s”选项

问候,,
Ankit

不确定,如果您想要实现一个解决方案,那将比必要的更复杂

无论您使用的是什么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'#"
作为分隔符,您可以选择您想要的任何内容。当您在替换字符串中使用它时,您不必总是转义它