我有一个火鸟数据库,我想做点什么。当我尝试这个命令时,它不起作用了。
echo DELETE FROM TXN WHERE SALESBEGIN < current_date - 2;" | isql -u sysdba -p masterkey localhost:C:\aaa.fdbSALESBEGIN列的类型为DATETIME
但是当我删除"<“操作符时,它就开始工作了。我怎么才能修好它?这就是产出;
C:\Program Files (x86)\Firebird\Firebird_2_0\bin>echo "DELETE FROM TXN
WHERE SALESBEGIN < current_date - 2;" | isql -u sysdba -p masterkey
localhost:C:\aaa.fdb
Database: localhost:C:\aaa.fdb, User: sysdba
SQL> CON> Expected end of statement, encountered EOF发布于 2017-11-06 10:46:18
问题是<,它是命令行的重定向字符。您需要使用^来转义。
然而,根据本站的说法:
当使用管道时,表达式会被解析两次。首先,在执行管道之前的表达式时,第二次执行管道之后的表达式。因此,要转义第二个表达式中的任何字符,都需要双转义。
因此,您需要三个^字符来转义<符号:
echo DELETE FROM TXN WHERE SALESBEGIN ^^^< current_date - 2; | isql -u sysdba -p masterkey localhost:C:\aaa.fdb在我的经验中,如果简单地将语句放入一个SQL脚本中,然后运行该脚本,那么类似于的事情就会容易得多。在isql中,将是isql -i delete.sql
如果仍然希望将所有内容保存在一个批处理文件中,可以执行以下操作:
echo DELETE FROM TXN WHERE SALESBEGIN ^< current_date - 2;> _temp_delete.sql
isql -i _temp_delete.sql -u sysdba -p masterkey localhost:C:\aaa.fdb您仍然需要在那里转义<,但只需要一次,因为|没有涉及到。
有关如何在批字符转义命令行或批处理脚本上转义特殊字符的更多信息,请参见。
https://stackoverflow.com/questions/47134629
复制相似问题