Nun, das ist irgendwie hässlich, aber es funktioniert gut. Es ist generisches SQL und funktioniert in jeder Umgebung. Generieren Sie einfach eine Anzahl von Selects einer Teilzeichenfolge, die größer ist als die maximale Länge des Feldes, das Sie lesen. Ändern Sie die Zahl 50 in der Funktion zu einer Zahl, die Ihre Feldlänge überschreitet. Es kann eine wirklich lange Abfrage zurückgeben, aber wie gesagt, es wird gut funktionieren. Hier ist ein Beispiel in Python:
import sqlite3
c = sqlite3.connect('test.db')
c.execute('create table myTable (id integer, content varchar[50])')
for id, content in ((1,'apple'),(2,'pineapple'),(3,'application'),(4,'nation')):
c.execute('insert into myTable values (?,?)', [id,content])
c.commit();
def GenerateSQL(substrSize):
subqueries = ["select substr(content,%i,%i) AS substr, count(*) AS myCount from myTable where length(substr(content,%i,%i))=%i group by substr(content,%i,%i) " % (i,substrSize,i,substrSize,substrSize,i,substrSize) for i in range(50)]
sql = 'select substr FROM \n\t(' + '\n\tunion all '.join(subqueries) + ') \nGROUP BY substr HAVING sum(myCount) > 1'
return sql
print GenerateSQL(3)
print c.execute(GenerateSQL(3)).fetchall()
Die Abfrage erzeugt sieht aus wie:
select substr FROM
(select substr(content,0,3) AS substr, count(*) AS myCount from myTable where length(substr(content,0,3))=3 group by substr(content,0,3)
union all select substr(content,1,3) AS substr, count(*) AS myCount from myTable where length(substr(content,1,3))=3 group by substr(content,1,3)
union all select substr(content,2,3) AS substr, count(*) AS myCount from myTable where length(substr(content,2,3))=3 group by substr(content,2,3)
union all select substr(content,3,3) AS substr, count(*) AS myCount from myTable where length(substr(content,3,3))=3 group by substr(content,3,3)
union all select substr(content,4,3) AS substr, count(*) AS myCount from myTable where length(substr(content,4,3))=3 group by substr(content,4,3)
...)
GROUP BY substr HAVING sum(myCount) > 1
Und die Ergebnisse es sind produziert:
[(u'app',), (u'ati',), (u'ion',), (u'nat',), (u'pin',), (u'ple',), (u'ppl',), (u'tio',)]
was möchten Sie als Argument neben der Zahl, die die Länge darstellt, als Abfrage an die Abfrage senden? Aus welcher Kodiersprache wird dies abgeleitet? –