Re: Escape character weirdness
- From: Joe Weinstein <joeNOSPAM@xxxxxxx>
- Date: Tue, 11 Apr 2006 10:28:23 -0700
David Thielen wrote:
Hi;
This works:
SELECT * FROM demo WHERE (name LIKE 'Da[%]ve')
This dies not:
SELECT * FROM demo WHERE (name LIKE 'Da\%ve') - it returns no rows
Did you try:
SELECT * FROM demo WHERE (name LIKE 'Da\\%ve')
Yet DatabaseMetaData.getSearchStringEscape(); returns "\\".
Any ideas as to what is going on?
Sql Server 2000 and latest JDBC driver.
thanks - dave
Just to be clear, what are you trying to do? Do you have names that really
include the '%' character? You're right. I tried a 'LIKE ' query, trying
to specify the pattern with an escaped '%' to find values with a real '%'
in them, and couldn't....
I get:
Driver version is 1.0.809.102
We inserted 'JOE%JOE'
We inserted 'JOE_JOE'
trying select * from #foo where bar = 'JOE%JOE'
The specific value equals output is: 'JOE%JOE'
trying prepared select * from #foo where bar like 'JOE%JOE'
prepared query like output is: 'JOE%JOE'
prepared query like output is: 'JOE_JOE'
trying prepared select * from #foo where bar like 'JOE\\%JOE'
(finds nothing)
trying prepared select * from #foo where bar like 'JOE[%]JOE'
prepared query bracketed output is: 'JOE%JOE'
(finds the one row)
from this code:
c = d.connect("jdbc:sqlserver://JOE:1433", props );
DatabaseMetaData dd = c.getMetaData();
System.out.println("Driver version is " + dd.getDriverVersion() );
Statement stmt = c.createStatement();
stmt.execute("create table #foo(bar varchar(50) primary key)");
PreparedStatement p = c.prepareStatement("insert into #foo values(?)");
p.setString(1, "JOE%JOE");
p.executeUpdate();
p.setString(1, "JOE_JOE");
p.executeUpdate();
p.close();
ResultSet r = stmt.executeQuery("select * from #foo where bar like '%'");
while (r.next()) System.out.println("We inserted '" + r.getString(1) + "'");
r.close();
r = stmt.executeQuery("select * from #foo where bar = 'JOE%JOE'");
System.out.println("trying select * from #foo where bar = 'JOE%JOE'");
while (r.next()) System.out.println("The specific value equals output is: '" + r.getString(1) + "'");
r.close();
p = c.prepareStatement("select * from #foo where bar like ?");
p.setString(1, "JOE%JOE");
r = p.executeQuery();
System.out.println("trying prepared select * from #foo where bar like 'JOE%JOE'");
while (r.next()) System.out.println("prepared query like output is: '" + r.getString(1) + "'");
r.close();
p.setString(1, "JOE\\\\%JOE");
r = p.executeQuery();
System.out.println("trying prepared select * from #foo where bar like 'JOE\\\\%JOE'");
while (r.next()) System.out.println("prepared query escaped output is: '" + r.getString(1) + "'");
r.close();
p.setString(1, "JOE[%]JOE");
System.out.println("trying prepared select * from #foo where bar like 'JOE[%]JOE'");
r = p.executeQuery();
while (r.next()) System.out.println("prepared query bracketed output is: '" + r.getString(1) + "'");
r.close();
.
- Follow-Ups:
- Re: Escape character weirdness
- From: David Thielen
- Re: Escape character weirdness
- References:
- Escape character weirdness
- From: David Thielen
- Re: Escape character weirdness
- From: Joe Weinstein
- Re: Escape character weirdness
- From: David Thielen
- Escape character weirdness
- Prev by Date: Re: Unexpected Exception when inserting data in SQL 2000
- Next by Date: Re: Unexpected Exception when inserting data in SQL 2000
- Previous by thread: Re: Escape character weirdness
- Next by thread: Re: Escape character weirdness
- Index(es):
Loading