Delphi中LIKE查询含&字符的行异常问题求助
解决LIKE查询含"&"字符返回所有非空行的问题
问题原因
FireDAC默认将&视为参数占位符,而非普通字符。当执行LIKE '%&%'时,FireDAC会把&解析成参数占位符,实际执行的SQL等效于LIKE '%%',因此会匹配所有NAME列非空的行。而$不是FireDAC的默认占位符,所以对应查询能正常返回结果。
解决方法
有两种实用的处理方式:
1. 转义&字符
在FireDAC中,使用两个&来转义单个&,修改后的代码如下:
FDQuery1.SQL.Text := 'SELECT * FROM DATA WHERE NAME LIKE ''%&&%'''; FDQuery1.Open();
2. 关闭参数占位符自动解析
通过设置FDQuery1.Params.ParseSQL为False,让FireDAC不再解析SQL中的&为参数,代码示例:
FDQuery1.Params.ParseSQL := False; FDQuery1.SQL.Text := 'SELECT * FROM DATA WHERE NAME LIKE ''%&%'''; FDQuery1.Open();
注意:如果你的SQL语句中需要正常使用参数占位符,这种方法会影响参数功能,需根据实际场景选择。
内容的提问来源于stack exchange,提问作者Habiburnik
相关产品推荐
相关产品推荐

