Avatar billede jensen363 Forsker
20. juli 2023 - 08:32 Der er 11 kommentarer og
1 løsning

Find bestemt tekst i række

I tabel 1 har jeg i en bestemt kolonne en tekst som udover en mængde anden information, også kan indeholde et bestemt nøgleord/tekst

I tabel 2 har jeg listen over nøgleord som jeg skal have identificeret fra Tabel 1

Eksempel

Tabel 1    =  HE S01052 indbet 15090
Tabel 2    =  S01052

I Tabel 1 skal nøgleord så indsættes/opdateres i en ny kolonne
Avatar billede Gustav Ekspert
20. juli 2023 - 08:46 #1
Du kan bruge en forespørgsel til at identificere dem:
Select Tabel1.*
From Tabel1, Tabel2
Where Tabel1.Felt1 Like '*' & Tabel2.KeyWord & '*'
Avatar billede jensen363 Forsker
20. juli 2023 - 09:50 #2
Den løsning er for tidskrævende, - tabellen med KeyWord har næsten 200K rækker :-(
Avatar billede jensen363 Forsker
20. juli 2023 - 09:54 #3
Jeg har en løsning i Excel som gør arbejdet med denne formel :

IFERROR(INDEX(KeyWord!A:A,AGGREGATE(15,6,ROW(KeyWord!A:A)/(ISNUMBER(SEARCH(KeyWord!A:A,[@KPPTXT]))),1)),"")

men vil gerne have noget tilsvarende integreret i Access
Avatar billede Gustav Ekspert
20. juli 2023 - 10:19 #4
Der er desværre ingen smarte løsninger på denne type opgave.
Et index på keyword-feltet er det eneste at gøre.

Hvor lang tid tager det, og hvor kort tid burde det tage?
Avatar billede jensen363 Forsker
20. juli 2023 - 11:12 #5
Stoppede den efter 15 minutter :-(
Avatar billede Gustav Ekspert
20. juli 2023 - 12:04 #6
Du kunne splitte det lange felt op i enkeltfelter:
HE S01052 indbet 15090 ->
HE
S01052
indbet
15090
Eller, hvis formatet er fast, udtrække nøgleordet:
KeyWord: Mid([Felt1], 4, 6)
S01052
Hvor mange poster er der i den anden tabel?
Avatar billede jensen363 Forsker
20. juli 2023 - 12:32 #7
Det er desværre tilfældigt hvor KeyWord befinder sig :-(
Avatar billede bvirk Guru
20. juli 2023 - 13:06 #8
Måske kører denne hurtige

[code]
select Tabel1.*
from Tabel1 inner join Tabel2 on inStr(Tabel1.felt,Tabel2.keyword) > 0
[/code]

og med et index på Tabel2 og ombyt evt rækkefølge af tabeller i inner join (jeg ved ikke hvordan det virker)
Avatar billede Gustav Ekspert
20. juli 2023 - 13:09 #9
Du kunne opsplitte linjen i felter med hver sit ord:
Public Function WordSplit( _
    ByVal Line As String, _
    ByVal Index As Integer) _
    As String
   
    Dim Parts()    As String
    Dim Value      As String
    Dim Numbers()  As String
    Dim NumberIndex As Integer
    Dim PartIndex  As Integer
     
    Parts = Split(Line)
   
    For PartIndex = LBound(Parts) To UBound(Parts)
        If Parts(PartIndex) <> "" Then
            NumberIndex = NumberIndex + 1
            ReDim Preserve Numbers(0 To NumberIndex)
            Numbers(NumberIndex) = LTrim(Numbers(NumberIndex) & " ") & Parts(PartIndex)
        End If
    Next
   
    If Index = -1 Then
        ' Return count of fields (as text).
        Value = CStr(UBound(Numbers))
    ElseIf Index <= UBound(Numbers) Then
        ' Return value of a field.
        Value = Trim(Numbers(Index))
    End If
   
    WordSplit = Value
   
End Function
og bruge denne i en forespørgsel:
Select 
    Id,
    WordSplit([Felt1], 1) As Word1,
    WordSplit([Felt1], 2) As Word2,
    WordSplit([Felt1], 3) As Word3,
    WordSplit([Felt1], 4) As Word4,
    WordSplit([Felt1], 5) As Word5
From
    Tabel1
- eventuelt skrive resultatet til en midlertidig tabel.

Herefter kan du filtrere eller joine denne med Tabel2 med søgeordene.
Avatar billede jensen363 Forsker
20. juli 2023 - 13:19 #10
Den sluttede efter ca 1½ time, - kan leve med det da øvelsen kun skal køre månedligt
Avatar billede Gustav Ekspert
20. juli 2023 - 14:10 #11
Hvordan gjorde du?
Avatar billede jensen363 Forsker
20. juli 2023 - 15:00 #12
Det var dit første forslag som jeg lod køre hen over frokost :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB