2009-02-13 8 views
2

J'essaie de remplacer plusieurs lignes dans une base de données Access pour suivre un nouvel ensemble de règles de données. Par exemple, le mot Fort à Fort Myers est répertorié comme Ft., Ft et Fort. Je voudrais apporter un changement global au groupe. Je suis familier avec la commande SQL replace, mais je me demande si quelqu'un a fait quelque chose de similaire avec une procédure stockée ou avait de l'expérience avec quelque chose comme ça.Comment utiliser la fonction de remplacement SQL efficacement?

+0

Remplacer n'est pas une fonction SQL. Si vous exécutez votre SQL dans Access lui-même, vous pouvez utiliser la fonction VBA Replace() dans votre SQL, car le service d'expression Access permet l'utilisation de fonctions VBA prédéfinies et définies par l'utilisateur dans SQL. –

+0

@David W. Fenton: encore une fois, vous ne voyez pas la différence entre Access et Jet/ACE. REPLACE() peut en effet être utilisé dans ACE/Jet SQL en dehors de l'interface utilisateur Access. Si l'affiche utilise MS SQL Server, REPLACE est également un mot-clé dans T-SQL (et SQL-92). – onedaywhen

Répondre

1

Vous devez être vraiment, vraiment prudent que vous ne remplacez pas plus que ce que vous avez l'intention. FAITES UNE SAUVEGARDE d'abord si les choses tournent mal. Toujours commencer par un SELECT pour filtrer les enregistrements en premier. Passez en revue les résultats avec soin.

SELECT * FROM Table WHERE City LIKE "%Ft. Myers%" 

Puis faites les remplacements comme Carlton a dit.

+0

Vous ne savez pas si la balise 't-sql' est pertinente, mais si vous utilisez Jet/ACE (familièrement 'MS Access'), il est préférable d'utiliser le mot clé ALIKE à la place de LIKE, sinon le moteur devra être en mode de requête ANSI-92 ou les caractères génériques '%' pour fonctionner correctement. – onedaywhen

1

Plus dur que cela puisse paraître au profane ...

Il n'y a pas moyen de contourner cela, mais faire un remplacement pour chaque chose que vous n'aimez pas, changer dans ce que vous n'aimez. MAIS SOYEZ TRÈS PRUDENT ... conséquences imprévues et tous. Je recommande de faire une sélection avant chaque mise à jour pour voir exactement ce que vous allez mettre à jour.

Donc, dans votre instance de Fort Myers que vous devez faire 3 Remplace:

Replace("Ft. Myers", "Fort Myers") 
Replace("Ft Myers", "Fort Myers") 
Replace("Fort. Myers", "Fort Myers") 

Si vous avez beaucoup de données et beaucoup de choses à changer, cela pourrait être une tâche énorme. Mais il n'y a pas de façon "automatisée" de le faire - SQL n'utilise pas la logique floue, vous devez spécifier exactement tout ce que vous voulez faire.

+1

Oui ... vous ne voulez pas faire d'erreur clbuttic. – BIBD

1

Les adresses de rangement peuvent être un cauchemar. Vous devrez peut-être créer une remplacer le tableau:

ShouldBe Current 
Fort Myers Ft Myers 
Foot Hill Ft Hills 

Pour la plupart, la colonne ShouldBe peut être rempli avec des requêtes de mise à jour, mais vous serez également en mesure d'exécuter votre oeil sur les résultats avant de mettre à jour la table principale . Cela sera également utile pour la future saisie de données.

1

Si votre objectif est de normaliser les noms de ville qui sont quelque chose comme ~ Fort Myers, vous devriez être en mesure de faire quelque chose comme ceci:

UPDATE Table SET City = 'Fort Myers' WHERE City LIKE 'F%Myers'; 

Cela devrait remplacer tout champ Ville dans une ligne où la ville commence par un F et se termine à Myers. Cela peut être ce que vous voulez, mais soyez très prudent.

+0

Vous ne savez pas si la balise 't-sql' est pertinente, mais si vous utilisez Jet/ACE (familièrement 'MS Access'), il est préférable d'utiliser le mot-clé ALIKE à la place de LIKE, sinon le moteur devra être en mode de requête ANSI-92 ou les caractères génériques '%' pour fonctionner correctement. – onedaywhen

Questions connexes