我正在尝试获取一个查询工作,它从表单控件获取值(有时只是字符串的第一部分).我遇到的问题是它只在输入完整字符串时返回记录.
即在姓氏框中,我应该能够输入gr,然后它会显示出来
绿灰格雷厄姆
但是目前它并没有提供任何无用的完整搜索字符串.
有问题的表单上有4个搜索控件,只有在填写框时才会在查询中使用它们.
查询是:
SELECT TabCustomers.*,
TabCustomers.CustomerForname AS NameSearch,
TabCustomers.CustomerSurname AS SurnameSearch,
TabCustomers.CustomerDOB AS DOBSearch,
TabCustomers.CustomerID AS MemberSearch
FROM TabCustomers
WHERE IIf([Forms]![FrmSearchCustomer]![SearchMember] Is Null
,True
,[Forms]![FrmSearchCustomer]![SearchMember]=[customerid])=True
AND IIf([Forms]![FrmSearchCustomer].[SearchFore] Is Null
,True
,[Forms]![FrmSearchCustomer]![SearchFore] Like [customerforname] & "*")=True
AND IIf([Forms]![FrmSearchCustomer]![SearchLast] Is Null
,True
,[Forms]![FrmSearchCustomer]![SearchLast] Like [customersurname] & "*")=True
AND IIf([Forms]![FrmSearchCustomer]![Searchdate] Is Null
,True
,[Forms]![FrmSearchCustomer]![Searchdate] Like [customerDOB] & "*")=True;
Run Code Online (Sandbox Code Playgroud) 我有一个使用C++连接的Pervasive数据库.到目前为止,我所有的查询都是参数化的,即"SELECT USER.NAME FROM USER WHERE USER.ID = ?"工作正常.但是在搜索查询中我在WHERE子句中使用LIKE,然后似乎我不能使用参数和野性字符(%).
我的查询看起来像这样"SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'",因为参数周围有两个'-mark,这就失败了,它搜索了名字中带有?标记的狗.在SQL Server中,这可能通过连接字符串来解决"SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'",但这在Pervasive中是无效的语法(参见本页底部:http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref- 04-55.html).
我也尝试将%-signs添加到参数本身,但这似乎也不起作用.
有谁知道解决这个问题?
EDIT1: 一些C++代码示例:
CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;";
m_pAdoCommand->CommandText = _bstr_t(sqlCommand);
m_pAdoCommand->Parameters->Append( m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'")) );
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText);
Run Code Online (Sandbox Code Playgroud)
(m_pAdoCommand是一个_CommandPtr,并且m_pAdoRecordset是一个_RecordsetPtr.我在这个例子中更改了SQL表的名称,以便它们在这里变得敏感.)
上面的代码将返回一行有一个名字的狗'%bob%',但我希望它返回所有在他们的名字中有鲍勃的狗.
我需要额外的一双眼睛.任何帮助将不胜感激.这是一个非常简单的搜索查询,但无论出于何种原因,我找不到该错误.好吧,我知道bug在哪里.我只是无法超越它.无论如何.....
我从POST变量中获取搜索值,设置该变量,然后按如下方式设置列变量...
$term = "'%".$_POST['searchTerm']."%'";
$field = "columnName";
Run Code Online (Sandbox Code Playgroud)
当我回应这些时,它们会完美地出现.因此,如果我在表单中键入"a",我将回显'%a%'和columnName.
然后我准备查询并绑定参数如下...
$suquery=$dbCon->prepare("select * from Table where ? LIKE ?");
$suquery->bind_param('ss', $field, $term);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
结果总是返回0行.我发现,当我玩这个时,没有绑定参数正常工作,即使它应该如此回应.例如,当我更改查询以便列被硬编码并且仅绑定搜索项时....
$suquery=$dbCon->prepare("select * from Table where columnName LIKE ?");
$suquery->bind_param('s', $term);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
我仍然得到零返回的行.这告诉我,即使$ field回声为'%a%',某些东西仍然没有关闭.我真的很茫然.同样,当我硬连接搜索词并绑定列时......
$suquery=$dbCon->prepare("select * from Table where ? LIKE '%a%'");
$suquery->bind_param('s', $field);
$suquery->execute();
Run Code Online (Sandbox Code Playgroud)
我得到了太多的行返回.它实际上从表中拉出行,其中任何列中的值包含字母"a".因此,列或术语都没有正确绑定.劳动节!
我目前正在运行这样的查询:
SELECT *
FROM email
WHERE email_address LIKE 'ajones@%'
OR email_address LIKE 'bsmith@%'
OR email_address LIKE 'cjohnson@%'
Run Code Online (Sandbox Code Playgroud)
大量的OR人困扰我.有没有办法用类似于IN运算符的东西来浓缩它,例如:
SELECT *
FROM email
WHERE email_address LIKE ('ajones@%', 'bsmith@%', 'cjohnson@%')
Run Code Online (Sandbox Code Playgroud)
或者这只是一厢情愿的想法?
SQL 2008:这很慢(需要1 1/2分钟):
declare @p1 varchar(50) set @p1 = '976j%' select * from invsearch_query where comparepnfwd like @p1
这需要不到一秒钟:
select * from invsearch_query where comparepnfwd like '976j%'
为什么???
我一直在打破这个希望,这是可能的
declare @locationType varchar(50);
declare @SearchTerm NVARCHAR(100);
SELECT column1, column2
FROM whatever
WHERE
CASE @locationType
WHEN 'location' THEN account_location LIKE @SearchTerm
WHEN 'area' THEN Area LIKE @SearchTerm
WHEN 'division' THEN xxx_location_division LIKE @SearchTerm
END
Run Code Online (Sandbox Code Playgroud)
我在这里复制了另一个相关帖子的代码.
我收到错误:
关键字"LIKE"附近的语法不正确.
我有Ms Access的查询,我使用C#和Ole DB命令.它适用于Ms Access,但是当我使用OleDB从C#传递查询时,没有任何反应.无论如何这是我的代码:
SQL查询
SELECT * FROM tblIssue WHERE id LIKE '*2*' AND dateChecque LIKE '**'AND +
issueTo LIKE '**' AND byTheName LIKE '**' AND bankName LIKE '**' AND accountNo LIKE '**' +
AND checqueNo LIKE '**' AND amount LIKE '**' AND being LIKE '**' AND whoDeleted LIKE '**' +
AND whyDeleted LIKE '**' AND dateCreated LIKE '**';
Run Code Online (Sandbox Code Playgroud)
C#代码
try
{
DataTable newDt = new DataTable();
OleDbDataAdapter newSda = new OleDbDataAdapter(sqlQuery , conn);
newSda.Fill(newDt);
if (newDt.Rows.Count > 0)
{ …Run Code Online (Sandbox Code Playgroud) 我想使用SQL LIKE函数执行简单搜索.不幸的是,由于某种原因,它似乎没有起作用.以下是我的代码.
private void gvbind()
{
connection.Open();
string sql = "";
if (txtSearch.Text.Trim() == "")
{
sql = "SELECT a.cname,[bid],b.[bname],b.[baddress],b.[bcity],b.[bstate],b.[bpostcode],b.[bphone],b.[bfax],b.[bemail] FROM [CLIENT] a INNER JOIN [BRANCH] b ON a.clientID=b.clientID ORDER BY a.[clientID]";
}
else
{
sql = "SELECT a.cname,[bid],b.[bname],b.[baddress],b.[bcity],b.[bstate],b.[bpostcode],b.[bphone],b.[bfax],b.[bemail] FROM [CLIENT] a INNER JOIN [BRANCH] b ON a.clientID=b.clientID WHERE b.[bname] LIKE '%@search%' ORDER BY a.[clientID]";
}
SqlCommand cmd = new SqlCommand(sql,connection);
cmd.Parameters.AddWithValue("@search", txtSearch.Text.Trim());
cmd.CommandType = CommandType.Text;
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
DataSet ds = new DataSet();
adp.Fill(ds); …Run Code Online (Sandbox Code Playgroud) 在阅读了很多教程之后,我发现有很多方法可以在Go中的预准备语句中绑定参数,其中一些是
SELECT * FROM bla WHERE x = ?col1 AND y = ?col2
SELECT * FROM bla WHERE x = ? AND y = ?
SELECT * FROM bla WHERE x = :col1 AND y = :col2
SELECT * FROM bla WHERE x = $1 AND y = $2
Run Code Online (Sandbox Code Playgroud)
第一个问题,绑定参数的跨数据库方式是什么?(适用于任何数据库)
第二个问题,我没有读过关于LIKE语句的教程,如何LIKE正确绑定-statement的参数?
SELECT * FROM bla WHERE x LIKE /*WHAT?*/
Run Code Online (Sandbox Code Playgroud)
第三个问题,也没有给出IN语句的例子,如何IN正确绑定语句的参数?
`SELECT * FROM bla WHERE x IN ( /*WHAT?*/ …Run Code Online (Sandbox Code Playgroud) 我需要从蜂巢表中检索列,该蜂巢表必须以大写字母开头,以数字结尾。我用这个查询从tab1选择* * col1像'[AZ]%[0-9]'; 但是无法检索记录,只能得到空结果。