He encontrado esta respuesta útil: Accent and case insensitive COLLATE equivalent in Oracle, pero mi pregunta es con respecto a LIKE buscando con una versión 9 Oracle db.Collation insensible a mayúsculas y minúsculas en Oracle con LIKE
que han intentado una consulta como esta:
SELECT column_name
FROM table_name
WHERE NLSSORT(column_name, 'NLS_SORT = Latin_AI')
LIKE NLSSORT('%somethingInDB%', 'NLS_SORT = Latin_AI')
pero se devuelven cada vez hay resultados.
he creado un pequeño archivo de Java para probar:
import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DbCollationTest
{
public static void main(String[] args) throws SQLException
{
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("url");
dataSource.setUsername("usr");
dataSource.setPassword("pass");
Connection conn = null;
PreparedStatement createStatement = null;
PreparedStatement populateStatement = null;
PreparedStatement queryStatement = null;
PreparedStatement deleteStatement = null;
ResultSet rs = null;
try
{
conn = dataSource.getConnection();
createStatement = conn.prepareStatement("CREATE TABLE CollationTestTable (Name varchar(255))");
createStatement.execute();
String[] names = { "pepe", "pépé", "PEPE", "MEME", "mémé", "meme" };
int i = 1;
for (String name : names)
{
populateStatement = conn.prepareStatement("INSERT INTO CollationTestTable VALUES (?)");
populateStatement.setString(1, name);
populateStatement.execute();
}
queryStatement = conn.prepareStatement("SELECT Name FROM CollationTestTable WHERE NLSSORT(NAME, 'NLS_SORT = Latin_AI') LIKE NLSSORT('%pe%', 'NLS_SORT = Latin_AI')");
rs = queryStatement.executeQuery();
while (rs.next())
{
System.out.println(rs.getString(1));
}
deleteStatement = conn.prepareStatement("DROP TABLE CollationTestTable");
deleteStatement.execute();
}
finally
{
//DBTools.tidyUp(conn, null, rs);
//DBTools.tidyUp(createStatement);
//DBTools.tidyUp(populateStatement);
//DBTools.tidyUp(queryStatement);
//DBTools.tidyUp(deleteStatement);
}
}
}
no he tenido ningún éxito buscando en Google, cualquier persona tiene alguna solución?
Deseo realizar una búsqueda de parte de un nombre y devolver resultados que coinciden utilizando la insensibilidad de mayúsculas y minúsculas.
Gracias por la respuesta, ¿hay alguna forma de hacerlo sin alterar la sesión? Otras consultas en la misma sesión pueden requerir la configuración original de NLS. Aclamaciones. –
@Ed: puede guardar los parámetros de la sesión antes de ejecutar la consulta (seleccione * desde nls_session_parameters) y luego volver a colocarlos después de la consulta. –
He estado probando esto y todo se veía bien, pero ahora me dicen que la solución NLS_SORT y NLS_COMP solo se admite en la versión 10 r2. Necesito apoyar las bases de datos de Oracle con la versión mínima 9. ¿Es la única manera en que puedo realizar el caso y la búsqueda insensible a los acentos está usando funciones? –