Quiero hacer algo como esto en una consulta de MS Access, pero SUBSTRING es una función no definida.¿Hay un equivalente a la función SUBSTRING en MS Access SQL?
SELECT DISTINCT SUBSTRING(LastName, 1, 1)
FROM Authors;
Quiero hacer algo como esto en una consulta de MS Access, pero SUBSTRING es una función no definida.¿Hay un equivalente a la función SUBSTRING en MS Access SQL?
SELECT DISTINCT SUBSTRING(LastName, 1, 1)
FROM Authors;
Puede utilizar las funciones de cadena de VBA (como @onedaywhen señala en los comentarios, no son realmente las funciones de VBA, pero sus equivalentes de las bibliotecas MS Jet. En lo que a las firmas de función van, son llamó y funcionan de la misma, a pesar de que la presencia actual de MS Access no es necesario para que estén disponibles):.
SELECT DISTINCT Left(LastName, 1)
FROM Authors;
SELECT DISTINCT Mid(LastName, 1, 1)
FROM Authors;
creo que hay MID() y tal vez LEFT() y derecha() en acceso.
Los uso con LEN y obtengo la mayor parte de lo que necesito de los valores de cadena. – Bratch
no pude encontrar un módulo off-the-shelf que añadió esta función, por lo que escribió uno:
En Access, vaya a la cinta Database Tools, en el área de macro, haga clic en Visual Basic. En el área superior izquierda del proyecto, haga clic con el botón derecho en el nombre de su archivo y seleccione Insertar -> Módulo. En el módulo, pegue esto:
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
Guarde el módulo como module1 (valor predeterminado). Ahora puede usar sentencias como:
SELECT Substring_Index([fieldname],",",2) FROM table
He trabajado mucho con msaccess vba. creo que busca la función MID
ejemplo
dim myReturn as string
myreturn = mid("bonjour tout le monde",9,4)
le va a devolver el valor "tout"
¡Bienvenido a StackOverflow! Su respuesta es correcta, pero probablemente no obtendrá ningún voto, ya que no proporciona ninguna información nueva que no se encuentre en la respuesta aceptada. – CoderDennis
punto Picky: los archivos DLL involucrados son (I belive) Expsrv.dll y vbajet32. dll, que la documentación de MS se refiere colectivamente como Jet Expression Services. Así que creo que podemos considerarlos como expresiones ACE/Jet nativas, en lugar de 'funciones VBA' en contexto. Tenga en cuenta que algunas expresiones funcionan de forma diferente en ACE/Jet que sus funciones equivalentes de VBA, p. IIF(): VBA siempre evalúa cláusulas verdaderas y falsas, mientras que ACE/Jet no lo hace. – onedaywhen
@onedaywhen: Gracias por aclarar. No estaba seguro de escribir "funciones de VBA", pero no sabía qué escribir en su lugar. En el caso de las funciones de cadena mencionadas, obviamente son equivalentes. OTOH: creo que incluso puede usar funciones de VBA definidas por el usuario en una consulta de Access, pero esto puede ser específico de Access. – Tomalak
Supongo que es por eso que Nz() está disponible en Access nativo, pero no cuando se ejecutan consultas desde Excel. – Knox