---
title: "Felstavningar m.m"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/43339-felstavningar-m-m"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Jacob"
published: "2002-05-08T07:27:50.000Z"
updated: "2002-05-08T08:59:41.000Z"
replies: 4
views: 248
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/43339-felstavningar-m-m"
---

# Felstavningar m.m

## #1 — Jacob, 2002-05-08T07:27Z

Jag har en databas med en massa skådespelare (ca. 5000) Bland dessa har de kommit in några felstavningar. Jag orkar inte gå igenom alla 5000 så jag tänte göra ett script som letar reda på liknande poster, Jag gjorde så här:

```
set te=conn.execute("select * FRoM actor")
Do until te.eof
	fnamn=te("fnamn")
	enamn=te("enamn")
	te.MoveNext
	Do until te.eof
		sql2 = "SELECT DIFFERENCE('"&fnamn&"', '"& te("fnamn")&"')"
		Set svar= Conn.Execute(sql2) 
		If svar("")=4 then
			sql3 = "SELECT DIFFERENCE('"&enamn&"', '"&te("enamn")&"')"
			Set svar= Conn.Execute(sql3) 
			If svar("")=4 then Response.Write(fnamn&" "&enamn&" = "&te("fnamn")&" "&te("enamn")&"<br>")
		End If
		te.MoveNext
	Loop
	n=n+1
	te.MoveFirst
	te.move n
Loop
```

Problemet är att det tar en evighet att köra scriptet, så jag undrar om det är något fel, eller om man kan optimera det. Jag testade:

```
set te=conn.execute("select * FRoM actor")
Do Until te.eof
	set tes=conn.execute("select * from actor where soundex(fnamn) = soundex('"&te("fnamn")&"') AND soundex(enamn) = soundex('"&te("enamn")&"')")
	Do Until tes.eof
		If NOT te("fnamn")=tes("fnamn") AND NOT tes("enamn")=te("enamn") Then
			Response.Write(te("fnamn")&" "&te("enamn")&" = "&tes("fnamn")&" "&tes("enamn")&"<br>")
		End If
		tes.MoveNext
	Loop
	te.MoveNext
Loop
```

Men den hittar inte så många fel som det är.

Permalänk: https://www.webforum.nu/p/43339

## #2 — toha, 2002-05-08T07:56Z

Ja, kan förstå att det tar lång tid. Många databasanrop blir'e. :)

Ett sätt att snabba upp det är att göra en stored procedure av det hela. Ett annat sätt är att försöka skriva frågan i så få databasfrågor som möjligt. Jag är ingen sql-expert men jag tror det ska gå att göra på nå't vänster.

Bra grej det där med SOUNDEX() och DIFFERECE(). Visste inte att det fanns.

En fråga bara: betyder inte soundex-värdet 4 att strängarna matchar exakt? :o

Permalänk: https://www.webforum.nu/p/670505

## #3 — LarsG, 2002-05-08T08:06Z

Du kan nog få ihop det med en fråga

```
query = "select a1.fname,a1.ename,a2.fname,a2.ename " &_
" from actor a1 , actor a2 where a1.actorid <> a2.actorid" & _
" and difference(a1.fname+a1.ename,a2.fname+a2.ename) = 4"
```

Jag antar att du har någon kolumn (actorid) i tabellen som är unik

Den blir nog ganska tung att utföra då du måste jämföra alla med alla.

Permalänk: https://www.webforum.nu/p/670507

## #4 — Jacob, 2002-05-08T08:40Z

Det verkar som om du är något på spåren Lars men den tar bara på förnamnet verkar det som. Jag får iaf ett para tusen svar.
Och när jag kör den i enterprise så gör den om den till:
SELECT     a1.fnamn, a1.enamn, a2.fnamn AS Expr1, a2.enamn AS Expr2
FROM         actor a1 INNER JOIN
                      actor a2 ON a1.actorid \<\> a2.actorid
WHERE     (DIFFERENCE(a1.fnamn + a1.enamn, a2.fnamn + a2.enamn) = 4)

Permalänk: https://www.webforum.nu/p/670533

## #5 — Jacob, 2002-05-08T08:59Z

Så här ska det vara:

```
SELECT     a1.actorid, a1.fnamn, a1.enamn, a2.actorid AS Expr3, a2.fnamn AS Expr1, a2.enamn AS Expr2
FROM         actor a1 INNER JOIN
                      actor a2 ON a1.actorid <> a2.actorid
WHERE     (DIFFERENCE(a1.fnamn, a2.fnamn) = 4) AND (DIFFERENCE(a1.enamn, a2.enamn) = 4
```

Permalänk: https://www.webforum.nu/p/670535

---

Tråden på webben: https://www.webforum.nu/amne/asp/43339-felstavningar-m-m
