Wojciech Z.

Wojciech Z. Diagnosta
laboratoryjny

Temat: Wyciąganie fragmentu danych z komórki

Dostałem bazę w spadku i potrzebuję zrobić w niej trochę porządku i mam taki problem: w jednej kolumnie znajdują się rekordy gdzie czasem wpisywano dane w postaci: "tekst tekst liczba", a czasem tylko "tekst liczba". Jak wyciągnąć tylko liczbę z tych komórek?
Jakub Boroch

Jakub Boroch Bazy Danych,
Projektowanie,
Analiza systemowa,
Programowanie

Temat: Wyciąganie fragmentu danych z komórki

Witam

Założenie:
Mamy jakas tabele (t1) z polem val.
W polu val mamy wartości np:
xxx 1
xxx yyy 23
zzz cc fgg 34

Założenie przed cyframi na końcu masz spację.

No to piszemy sobie kwerendę:

Wyr1: Right$([val];InStr(1;StrReverse([val]);Chr(32);1))

gdzie:
val to kolumna z tymi wartościami, chr(32) to znak spacji
a więc w skrócie: wycinamy od prawej z val wszytko do miejsca gdzie znajdzie spacje (od końca)
Można by jeszcze dodać validację czy to dostajemy to liczba.

Ps. W T-SQL to zajeło chwilę ale przepisac to do Accessa to już trochę dłużej (inne funkcję do obsługi ciągłów znakowych).

Widok SQL z Accessa:
SELECT t1.val, Right$([val],InStr(1,StrReverse([val]),Chr(32),1)) AS Wyr1
FROM t1;

Efekt

val Wyr1

xxx 2 2
xxxx yyyy 3 3
xxxx yyy zzz 34 34

Pozdr
KUBAJakub Boroch edytował(a) ten post dnia 21.12.09 o godzinie 13:54

konto usunięte

Temat: Wyciąganie fragmentu danych z komórki

klasa C_REG_EXP
Option Compare Database

Private myRegExp As RegExp
Private myMatches As MatchCollection
Private myMatch As Match

Private oRegExp As Object

Private Sub Class_Initialize()
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
End Sub

Private Sub Class_Terminate()
Set myRegExp = Nothing
End Sub

Public Function GetId(sIn As String, sPattern As String) As String
myRegExp.pattern = sPattern
GetId = ""
Set myMatches = myRegExp.Execute(sIn)
For Each myMatch In myMatches
GetId = (myMatch.Value)
Exit Function
Next
End Function


w module (dowolnym)

Public C_REG_EXP As New C_REG_EXP

Public Function GetId(sIn As String) As Double
Dim sTmp As String
sTmp = C_REG_EXP.GetId(sIn, "[0-9]+")
GetId = 0
If IsNumeric(sTmp) Then
GetId = CDbl(sTmp)
End If
End Function


w kwerendzie

select GetId(k.tekst,'[0-9]+') as wynik from tabela as k
Wojciech Z.

Wojciech Z. Diagnosta
laboratoryjny

Temat: Wyciąganie fragmentu danych z komórki

Dzięki za pomoc, niestety okazało się że w większości komórek spacje są również na końcu i wyrzuca wyniki tylko tak gdzie ich nie ma...
a w przypadku rozwiązania Pana Przemysława nie wiem za bardzo gdzie mam wpisać nazwy tabeli i kolumny z której ma wyciągać dane...nie jestem niestety biegły w VBA
Jakub Boroch

Jakub Boroch Bazy Danych,
Projektowanie,
Analiza systemowa,
Programowanie

Temat: Wyciąganie fragmentu danych z komórki

Witam
jak spacje są na końcu to moze zwykly trim pomoże (usuwa spacje z poczatku i końca ciągu)

Wyr1: trim$(Right$(trim$([val]);InStr(1;StrReverse(trim$[val]));Chr(32);1)))

no chyba ze spację występują pomiędzy tymi cyframi które chcesz wyłuskać, no to trzeba by inaczej podejść do tematu.
Wojciech Z.

Wojciech Z. Diagnosta
laboratoryjny

Temat: Wyciąganie fragmentu danych z komórki

Dzięki już działa!temat można uznać za zamknięty



Wyślij zaproszenie do