Voglio fare qualcosa di simile all'interno di una query di MS Access, ma SUBSTRING è una funzione indefinita.Esiste un equivalente alla funzione SUBSTRING in MS Access SQL?
SELECT DISTINCT SUBSTRING(LastName, 1, 1)
FROM Authors;
Voglio fare qualcosa di simile all'interno di una query di MS Access, ma SUBSTRING è una funzione indefinita.Esiste un equivalente alla funzione SUBSTRING in MS Access SQL?
SELECT DISTINCT SUBSTRING(LastName, 1, 1)
FROM Authors;
È possibile utilizzare le funzioni di stringa VBA (come @onedaywhen sottolinea nei commenti, in realtà non sono le funzioni VBA, ma i loro equivalenti dalle librerie MS Jet. Per quanto riguarda le firme di funzione vanno, sono chiamato e funzionano allo stesso, anche se l'attuale presenza di MS Access non è necessario per loro di essere disponibili):.
SELECT DISTINCT Left(LastName, 1)
FROM Authors;
SELECT DISTINCT Mid(LastName, 1, 1)
FROM Authors;
penso che ci sia MID() e forse LEFT() e RIGHT() in Access.
Li uso con LEN e ottengo la maggior parte di ciò che mi serve dai valori stringa. – Bratch
non riuscivo a trovare un modulo di off-the-shelf che ha aggiunto questa funzione, così ho scritto uno:
In Access, andare al nastro Strumenti database, nella zona macro scattare in Visual Basic. Nell'area di progetto in alto a sinistra, fai clic con il pulsante destro sul nome del file e seleziona Inserisci -> Modulo. Nel modulo incolla questo:
Public Function Substring_Index(strWord As String, strDelim As String, intCount As Integer) As String
Substring_Index = delims
start = 0
test = ""
For i = 1 To intCount
oldstart = start + 1
start = InStr(oldstart, strWord, strDelim)
Substring_Index = Mid(strWord, oldstart, start - oldstart)
Next i
End Function
Salvare il modulo come modulo1 (impostazione predefinita). È ora possibile utilizzare istruzioni come:
SELECT Substring_Index([fieldname],",",2) FROM table
Ho lavorato molto con msaccess vba. Penso che si sta cercando per la funzione MID
esempio
dim myReturn as string
myreturn = mid("bonjour tout le monde",9,4)
vi restituirà il valore "tout"
Benvenuti in StackOverflow! La tua risposta è corretta, ma probabilmente non otterrà alcun voto poiché non fornisce alcuna nuova informazione che non sia già nella risposta accettata. – CoderDennis
punto Picky: le DLL sono coinvolti (I belive) Expsrv.dll e vbajet32. dll, la cui documentazione MS si riferisce collettivamente come Jet Expression Services. Quindi penso che possiamo considerarli espressioni native ACE/Jet, piuttosto che "funzioni VBA" nel contesto. Nota che alcune espressioni funzionano diversamente in ACE/Jet rispetto alle loro funzioni VBA equivalenti, ad es. IIF(): VBA valuta sempre entrambe le clausole true e false, mentre ACE/Jet no. – onedaywhen
@onedaywhen: Grazie per il chiarimento. Ero riluttante a scrivere "funzioni VBA", ma non sapevo cosa scrivere invece. Nel caso delle funzioni di stringa menzionate sono ovviamente equivalenti. OTOH - Penso che sia possibile utilizzare anche funzioni VBA definite dall'utente in una query di Access, ma potrebbe essere specifico di Access. – Tomalak
Immagino sia per questo che Nz() sia disponibile in Accesso nativo, ma non quando si eseguono query da Excel. – Knox