/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MS SQL] PATINDEX
Fra : Jesper Stocholm


Dato : 14-05-01 20:23

Jeg har behov for at trække de rækker ud af en database, der matcher
mønstret /^[abcdgmpsu]\d{6}$/i ... dvs en af karaktererne i listen
efterfulgt af 6 cifre ... men jeg har problemer med at få det til at virke
....

Jeg troede oprindeligt, at jeg kunne bruge noget i retning af

SELECT
*
FROM
TABLE1
WHERE
PATINDEX('^[acdpsu]\d{6}',col001) <> 0

men resultaterne giver ikke rigtigt mening, da det returnerer alle rækker i
tabellen. Når jeg ændrer min forespørgsel til

SELECT
col001 , PATINDEX('^[acdpsu]\d{6}',col001) AS match
FROM
TABLE1
WHERE
PATINDEX('^[acdpsu]\d{6}',col001) = 0
order by col001

man jeg se, at den returnerer 0 for alle sammenligninger.

Kan I hjælpe mig på rette vej ?

tak,

--
And now back to Terrence and Phillip
(Southpark)

- Jesper Stocholm - http://stocholm.dk

 
 
Lauritz Jensen (14-05-2001)
Kommentar
Fra : Lauritz Jensen


Dato : 14-05-01 20:34

Jesper Stocholm wrote:
>
> Jeg har behov for at trække de rækker ud af en database, der matcher
> mønstret /^[abcdgmpsu]\d{6}$/i ... dvs en af karaktererne i listen
> efterfulgt af 6 cifre

Jeg mener ikke, sql server understøder "\d" og "{<tal>}" syntaxerne.
Prøv eventuelt dette:

SELECT col001
FROM table1
WHERE col001 LIKE '[abcdgmpsuABCDGMPSU][0-9][0-9][0-9][0-9][0-9][0-9]'
ORDER BY col001

(kig i books online under "like" eller "pattern matching in search
conditions")

--
Lauritz

Jesper Stocholm (14-05-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 14-05-01 20:44

Hej Lauritz

Lauritz Jensen <lauritz2@hotmail.com> wrote in
<3B003330.4593210B@hotmail.com>:

>Jesper Stocholm wrote:
>>
>> Jeg har behov for at trække de rækker ud af en database, der matcher
>> mønstret /^[abcdgmpsu]\d{6}$/i ... dvs en af karaktererne i listen
>> efterfulgt af 6 cifre
>
>Jeg mener ikke, sql server understøder "\d" og "{<tal>}" syntaxerne.
>Prøv eventuelt dette:
>
>SELECT col001
>FROM table1
>WHERE col001 LIKE '[abcdgmpsuABCDGMPSU][0-9][0-9][0-9][0-9][0-9][0-9]'
>ORDER BY col001
>

hold da op ... det virkede ...

>(kig i books online under "like" eller "pattern matching in search
>conditions")
>

det har jeg sådan set allerede gjort ... det er bla på bagggrund af disse
sider - specielt siden "pattern matching in search conditions" - jeg har
prøvet at opbygge mønstret i sammenhæng med PATINDEX.

Men det er måske ikke den rigtige måde at gøre det via PATINDEX ? Jeg kunne
forestille mig, at det var mere optimalt (performancemæssigt) via den
indbyggede funktion end at lave en LIKE, der scanner alle indgange i
kolonnen.

--
And now back to Terrence and Phillip
(Southpark)

- Jesper Stocholm - http://stocholm.dk

Jakob Nilsson (14-05-2001)
Kommentar
Fra : Jakob Nilsson


Dato : 14-05-01 21:29


"Jesper Stocholm" wrote
....
> SELECT
> *
> FROM
> TABLE1
> WHERE
> PATINDEX('^[acdpsu]\d{6}',col001) <> 0

Jeg ved godt at du har fået et svar, men det er din '^' der ødelægger
festen for dig. For det første bruges '^' til at udelukke karakterer.
For det andet skal den være inden for [] hvis målet er at strengen ikke
skal starte med en karakter fra det angivne interval: [^acdpsu].

Som Lauritz skriver mener jeg heller ikke at notationen \d{tal} er
understøttet på SQL Server.

Mvh.
Jakob








Jesper Stocholm (14-05-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 14-05-01 23:37

"Jakob Nilsson" <jakobnilsson@hotmail.com> wrote in <mdXL6.9466$zv2.1333708
@news010.worldonline.dk>:

>
>"Jesper Stocholm" wrote
>...
>> SELECT
>> *
>> FROM
>> TABLE1
>> WHERE
>> PATINDEX('^[acdpsu]\d{6}',col001) <> 0
>
>Jeg ved godt at du har fået et svar, men det er din '^' der ødelægger
>festen for dig. For det første bruges '^' til at udelukke karakterer.
>For det andet skal den være inden for [] hvis målet er at strengen ikke
>skal starte med en karakter fra det angivne interval: [^acdpsu].
>

ok ... så misforstod jeg åbenbart dokumentationen ..

>Som Lauritz skriver mener jeg heller ikke at notationen \d{tal} er
>understøttet på SQL Server.
>

det skal jeg ikke kunne sige ... men Lauritz' forslag virkede i hvert fald
....

Tak for hjælpen.

--
And now back to Terrence and Phillip
(Southpark)

- Jesper Stocholm - http://stocholm.dk

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste