Akzent und groß-und Kleinschreibung Sortierung in Oracle mit WIE
Ich fand diese Antwort nützlich:
Akzent und groß-und Kleinschreibung SORTIEREN Gegenwert in Oracle, aber meine Frage ist in Bezug auf, WIE die Suche mit der version 9 von Oracle-db.
Habe ich versucht eine Abfrage wie diese:
SELECT column_name
FROM table_name
WHERE NLSSORT(column_name, 'NLS_SORT = Latin_AI')
LIKE NLSSORT('%somethingInDB%', 'NLS_SORT = Latin_AI')
aber keine Ergebnisse sind je zurückgekehrt.
Erstellt habe ich ein kleines Java-Datei zu testen:
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);
}
}
}
Ich habe nicht hatte keinen Erfolg, googeln hat jemand irgendwelche Lösungen?
Ich soll die Suche auf einen Teil der Namen und Ergebnisse, die abgestimmt mit case und Akzent Unempfindlichkeit.
InformationsquelleAutor Ed . | 2009-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
könnte es eine Methode zum ändern der session-Parameter
NLS_SORT
undNLS_COMP
:Wie gezeigt, in ein SO, Sie können den LIKE-operator mit
NLSSORT
(das ist da, NLSSORT gibt eine Zeichenfolge von bytes , wird für die Sortierung verwendet werden, und WIE die funktioniert nur mit charater strings)Update: Während der Einstellung der Parameter für die Sprachenunterstützung wäre meine erste Wahl, Sie könnten auch integrierte Funktionen, um das gleiche Ergebnis zu erzielen. Ein paar Beispiele:
speichern Sie die session-Parameter vor dem ausführen der Abfrage (select * from nls_session_parameters), dann setzen Sie danach wieder die Abfrage.
Ich habe getestet, diese und alle sahen gut aus bin jetzt aber gesagt, dass NLS_SORT und NLS_COMP Lösung wird nur unterstützt in der version 10 r2. Ich brauche die Unterstützung von Oracle-Datenbanken mit min version 9. Ist der einzige Weg, ich kann die case und Akzent insensitiv-Suche ist mit Funktionen?
NLS_SORT=Linguistische scheint ein 10g-Funktion. Weiterhin können Sie die zweite Methode (SQL-Funktionen) in 9i.
InformationsquelleAutor Vincent Malgrat