Shell 用常量日期字符串替换SQL字符串中的静态子字符串
我有一个内置代码处理器并支持shell脚本的软件。我在一个文件中有多个SQL字符串,这些字符串将通过软件逐个处理,并且某些子字符串常量的值将被该软件覆盖,而不会更改包含原始SQL的原始文件。您可以在运行时将替换参数传递给该软件 下面是其中一个SQL的sed示例: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
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'#"
作为分隔符,您可以选择您想要的任何内容。当您在替换字符串中使用它时,您不必总是转义它