Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/11/2011, 12h07   #1
Membre chevronné
 
Inscription : novembre 2007
Messages : 1 154
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : novembre 2007
Messages : 1 154
Points : 659
Points : 659
Envoyer un message via ICQ à Papy214
Par défaut select sur une série de n caractères identiques

Bonjour

Je coince un peu sur une requête. Mais elle n'est peut-être pas possible.
En fait je cherche à sélectionner toutes les lignes dont une colonne contient une valeur texte avec le même caractères répété de 1 à n fois. Par exemple, toutes les lignes de ma table pour lesquelles la colonne 'chaine' contient '-' ou '--' ou '---', etc.

Avec une expression régulière, ça donnerait un truc du genre '[-]+'

Existe-il une notion de répétition sur un caractère ?

Papy
Papy214 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 13h05   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Il est possible d'utiliser les regexp avec SQL Server soit via le CLR depuis 2005 soit avec les objets OLE et la librairie VBScript.RegExp

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 13h44   #3
Membre chevronné
 
Inscription : novembre 2007
Messages : 1 154
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : novembre 2007
Messages : 1 154
Points : 659
Points : 659
Envoyer un message via ICQ à Papy214
J'ai effectivement trouvé une implémentation de vbscript avec un fonction RegexMatch mais je n'arrive pas à la faire fonctionner :-(

Code :
1
2
3
4
 
SELECT *
FROM chaines 
WHERE dbo.RegexMatch('[-]+', chaines.texte) <> 0
ça me renvoie toutes les lignes pour lesquelles la valeur texte contient au moins un -

Surement un problème de syntaxe mais je ne vois pas lequel
Papy214 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 14h06   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Pourrais t'on avoir le detail de votre implementation du regexp ?

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 14h27   #5
Membre chevronné
 
Inscription : novembre 2007
Messages : 1 154
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : novembre 2007
Messages : 1 154
Points : 659
Points : 659
Envoyer un message via ICQ à Papy214
J'ai trouvé ça sur le site http://www.simple-talk.com/sql/t-sql...ion-workbench/

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
USE [Amadeus]
GO
 
/****** Object:  UserDefinedFunction [dbo].[RegexMatch]    Script Date: 11/03/2011 14:26:08 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE FUNCTION [dbo].[RegexMatch]
    (
      @pattern VARCHAR(2000),
      @matchstring VARCHAR(MAX)--Varchar(8000) got SQL Server 2000
    )
RETURNS INT
/* The RegexMatch returns True or False, indicating if the regular expression matches (part of) the string. (It returns null if there is an error).
When using this for validating user input, you'll normally want to check if the entire string matches the regular expression. To do so, put a caret at the start of the regex, and a dollar at the end, to anchor the regex at the start and end of the subject string.
*/ 
AS BEGIN
    DECLARE @objRegexExp INT,
        @objErrorObject INT,
        @strErrorMessage VARCHAR(255),
        @hr INT,
        @match BIT
 
    SELECT  @strErrorMessage = 'creating a regex object'
    EXEC @hr= sp_OACreate 'VBScript.RegExp', @objRegexExp OUT
    IF @hr = 0 
        EXEC @hr= sp_OASetProperty @objRegexExp, 'Pattern', @pattern
        --Specifying a case-insensitive match 
    IF @hr = 0 
        EXEC @hr= sp_OASetProperty @objRegexExp, 'IgnoreCase', 1
        --Doing a Test' 
    IF @hr = 0 
        EXEC @hr= sp_OAMethod @objRegexExp, 'Test', @match OUT, @matchstring
    IF @hr <> 0 
        BEGIN
            RETURN NULL
        END
    EXEC sp_OADestroy @objRegexExp
    RETURN @match
   END
 
GO
Papy214 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h05.


 
 
 
 
Partenaires

Hébergement Web