Eliminar todos los caracteres de un Campo dejando unicamente los números.

Necesito eliminar del Campo: TELÉFONO dentro de la Tabla: CLIENTES todos los caracteres que no sean números.

Y estos han de quedar sin espacios en blanco de esta forma:

Teléfono: +34 278.58.36 -> 342785836

Teléfono: 938.258.154 -> 938258154

2 respuestas

Respuesta
1

Puedes usar la función Replace. Supongamos que en una tabla Clientes tienes el campo Telefono como

Construyo una consulta de actualización

Le pongo el criterio de que no sea nulo, por si algún registro estuviera en blanco, y cuando la ejecuto

Me funciona perfectamente para los campos con caracteres que contienen puntos. Pero tengo otros campos que contienen: Espacios, /,-,+"

¿Cómo he de hacer para eliminar también todos estos?. Lo he intentado y no consigo hacerlo funcionar.

Sería igual, en Actualizar a

Reemplazar([telefono];"/";"")

Es decir, después del primer punto y coma va el texto que quieres reemplazar y después del segundo va por lo que quieres reemplazarlo, en este caso cadena vacía.

Si fuera en un formulario, se podría crear una función VB que reemplazara todos esos signos de una vez, pero en SQL creo, no lo sé, que hay que ir de uno en uno.

En Código

Si tengo el formulario basado en la tabla Clientes

Cuando pulso el botón, pero podría ser en cualquier otro evento

El código del botón es

Private Sub Comando31_Click()
DoCmd.SetWarnings False
Dim i As Integer
DoCmd.GoToRecord , , acFirst
For i = 1 To 4
Telefono = Replace([Telefono], ".", "")
Telefono = Replace([Telefono], "/", "")
Telefono = Replace([Telefono], "+", "")
Telefono = Replace([Telefono], " ", "")
Telefono = Replace([Telefono], "-", "")
DoCmd.GoToRecord , , acNext
Next
End Sub

En este caso, le pongo que sólo vaya hasta el cuarto registro, ya que los demás son nulos, pero si quisieras que fuera hasta el final, tendrías que ponerlo

For i=1 to me.recordset.recordcount y para prevenir posibles registros sin telefono casi mejor que lo pongas como

Private Sub Comando31_Click()
DoCmd.SetWarnings False
Dim i As Integer
DoCmd.GoToRecord , , acFirst
For i = 1 To 4
If Not IsNull([Telefono]) Then
Telefono = Replace([Telefono], ".", "")
Telefono = Replace([Telefono], "/", "")
Telefono = Replace([Telefono], "+", "")
Telefono = Replace([Telefono], " ", "")
Telefono = Replace([Telefono], "-", "")
End If
DoCmd.GoToRecord , , acNext
Next
End Sub
Respuesta
1

Sin tanta vuelta con una función y una consulta SQL.

TABLA A ACTUALIZAR

Código a incluir en un procedimiento

Docmd. SetWarnings(false)

DoCmd.RunSQL "UPDATE tblusuarios SET tblusuarios.tel = IIf(IsNull([tel]),"",Retirar([tel]));"

FUNCION RETIRAR()

Public Function retirar(Optional strCadena As String) As String

'Retira los elementos del array de un texto
'Elaborado por: Eduardo Pérez Fernández
'Dic/2020
'NOTA: Puede aumentar los elementos en el array separándolos por coma
Dim miArray As Variant
Dim varitem As Variant
If strCadena = "" Then
  retirar = ""
  Exit Function
End If
miArray = Array(".", ",", "+", "/", " ")

For Each varitem In miArray
strCadena = Replace(strCadena, varitem, "")
Next varitem

retirar = Trim(strCadena)
End Function

RESULTADO DESPUÉS DE ACTUALIZAR

Ahora si prefiere hacerlo con una consulta utilizando la función, sería:

Espero le sirva, Si desea el ejemplo escríbame a [email protected] y con gusto se lo envio, favor hacer referencia en el asunto sobre la consulta.

Se me olvidó comentarle que en esta línea de la función puede adicionar todos los caracteres que quiera excluir.

miArray = Array(".", ",", "+", "/", " ")

Por ejemplo, si quiere adicionar estos caracteres -) quedaría así:

miArray = Array(".", ",", "+", "/","-",")", " ")

Y así sucesivamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas