在字符串上使用格式,其中包含'%'已经签了

时间:2015-10-07 08:57:03

标签: sql delphi delphi-10-seattle

我有一个string,它存储我的SQL代码,它看起来像这样:

'SELECT * FROM myTable WHERE myField LIKE '%2015' AND myOtherField = %d'

第一个问题:如何才能在myOtherField上使用formatting?下面的代码似乎没有忽略第一个%符号:

MyQuery.SQL.Add(Format(myString, myNumber));

第二个问题:当我需要第一个'%'时,如何使用格式化?签署我的SQL,但我也想格式化日期?遗憾的是,以下代码也不起作用。

'SELECT * FROM myTable WHERE myField LIKE '%%d' AND myOtherField = %d'

2 个答案:

答案 0 :(得分:5)

MyQuery.Sql.BeginUpdate;
MyQuery.Sql.Add('SELECT * FROM myTable');
MyQuery.Sql.Add('WHERE myField LIKE :MyField AND');
MyQuery.Sql.Add('myOtherField = :MyOtherField');
MyQuery.Sql.EndUpdate;

MyQuery.Parameters[0].Value := '%' + '2015';
MyQuery.Parameters[1].Value := intval;

我建议这应该是所有查询的样板解决方案;它只需要很少的额外工作,并且比摆弄引号和转义字符更具可读性。

考虑到这个问题,这并不是说接受的答案是错误的。

答案 1 :(得分:3)

在您要保留的%符号前添加额外的%

像这样:

  Caption := Format('SELECT * FROM myTable WHERE myField LIKE ''%%2015'' AND myOtherField = %d', [4711]);

与问题2的解决方案相同:

  Caption := Format('SELECT * FROM myTable WHERE myField LIKE ''%%%d'' AND myOtherField = %d', [4711, 4712]);