将带有后缀的date()添加到sqlite3查询

时间:2017-02-14 23:21:46

标签: bash sqlite

希望用昨天的日期替换代码的2017-02-14部分作为函数,因为我希望能够使用此查询而无需每天修改它。我尝试调整在论坛中找到的其他代码但是没有到达任何地方。

我正在搜索数据库,试图找到前一天特定事件开始的时间,这是需要类似表达式和下划线的地方。我试图使用sqlite3的date()函数,但无法找到添加" __ __ __"的方法。后缀能够找到具体的条目。

此外,我对bash不够熟悉,无法将date +'%Y-%m-%d'传递给查询并添加" __ __ __"后缀到它的末尾以及能够找到我正在寻找的条目。

#!/bin/bash 
yesterday=$(date -d yesterday +'%Y-%m-%d __:__:__')                  
startDetails=sqlite3 hub.db 'select substr(timestamp,12,19) 
                              from OET where entryID="0" 
                               and timestamp like "2017-02-14 __:__:__";' 
stopDetails=sqlite3 hub.db 'select substr(timestamp,12,19) 
                             from OET where entryID="5" 
                              and timestamp like "'"$yesterday"'";' 

echo "Start: " $startDetails "Finish: "$stopDetails 
exit 0 
fi

我以简化的方式复制了我想要做的事情。在当前状态下,第一个查询正确返回,列出当天的两个开始时间,但是,第二个查询不返回任何内容,在调试中运行此脚本会返回以下结果。

+ $'\r'
checkWebID.sh: line 2: $'\r': command not found
++ date -d yesterday '+%Y-%m-%d __:__:__'
' yesterday='2017-02-14 __:__:__
++ sqlite3 hub.db 'select substr(timestamp,12,19) 
                    from OET where entryID="0" 
                     and timestamp like "2017-02-15 __:__:__";'
+ Details='04:49:01
'4:07:42
";'sqlite3 hub.db 'select substr(timestamp,12,19) 
                    from OET where entryID="5" 
                     and timestamp like "2017-02-14 __:__:__
+ StopDetails=$'\r'
+ $'\r'
checkWebID.sh: line 6: $'\r': command not found
+ echo 'Start: ' 04:49:01 $'14:07:42\r' 'Finish: ' $'\r\r'
 Finish:  :49:01 14:07:42
+ exit $'0\r'
: numeric argument required: 0

1 个答案:

答案 0 :(得分:2)

假设您正在使用GNU date,它可能很简单:

yesterday=$(date -d yesterday +'%Y-%m-%d __:__:__')
startDetails=`sqlite3 hub.db 'select substr(timestamp,12,19)
                                from OET where entryID="0"
                                 and timestamp like "'"$yesterday"'";'`

报价必须精心策划。在片段中:

'select … like "'"$yesterday"'";'

第一个双引号是文字;下一个单引号终止单引号字符串; "$yesterday"用双引号括起shell变量yesterday中的值(由于$yesterday的值中的空格,这些引号不是可选的 - 但是你可以更改它们以便它们是可选的);然后单引号开始(恢复)单引号字符串,双引号是字符串的一部分,然后单引号再次结束单引号字符串。

一般情况下,您应该优先使用$(…)符号来反对,特别是如果您打算在MarkDown中讨论事情(但有技术原因要求$(…)独立于SO和MarkDown)。