在字符串上使用格式,它已经有一个 '%' 符号
Using formatting on a string, which has a '%' sign already
我有一个 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'
在您要保留的 % 符号前添加一个额外的 %
像这样:
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]);
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;
我建议这应该是您所有查询的样板解决方案;它只需要很少的额外努力,而且比摆弄引号和转义字符更具可读性。
这并不是说接受的答案是错误的。
我有一个 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'
在您要保留的 % 符号前添加一个额外的 %
像这样:
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]);
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;
我建议这应该是您所有查询的样板解决方案;它只需要很少的额外努力,而且比摆弄引号和转义字符更具可读性。
这并不是说接受的答案是错误的。