shell - 用常量日期字符串替换 SQL 字符串中的静态子字符串
问题描述
我有一个具有内置代码处理器并支持 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 日”和
当前日期
'08/31/2018' 使用一个命令。日期字符串包括引号。
当我运行上述脚本时,出现以下错误:
sed: -e 表达式 #1,char 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'#"
作为分隔符,您可以选择任何您想要的。当您选择其他东西时,/
您不必一直逃避它,当您在替换字符串中使用它时。
推荐阅读
- python - 在 __init__ 中设置属性
- c++ - 非静态成员函数的 decltype 格式不正确吗?
- php - 为什么 curl 在 symfony 控制器中不起作用?
- sql-server - 表不按表名存在
- android - 为什么我的 Listview 没有显示我的项目?
- facebook - Facebook 正在请求一个有效的隐私政策 URL,返回 206 的有效 URL
- html - 内联 3 个元素
- vue.js - VueJS布局中的组件不更新
- javascript - 未调用按钮单击事件回调 - jest/enzyme
- python - 允许许多字符的 argparse 选项的简短形式