---
title: "Regexp i MSSQL"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/49061-regexp-i-mssql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Web-Tor"
published: "2002-07-30T13:53:15.000Z"
updated: "2002-09-02T13:32:13.000Z"
replies: 7
views: 220
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/49061-regexp-i-mssql"
---

# Regexp i MSSQL

## #1 — Web-Tor, 2002-07-30T13:53Z

Jag använder det här till MySQL:

```
$result = mysql_query("SELECT kol FROM tabell WHERE kol REGEXP '^(<[^>]*>|[^<])*[^<]*$SearchWord'") or die ("Fel");
```

Hur får man det att funka med MSSQL?

Permalänk: https://www.webforum.nu/p/49061

## #2 — LarsG, 2002-07-30T14:13Z

Om jag tolkar ditt regexp rätt så går det inte att få till med T-sql.

Det som finns är like som dock bara innehåller en bråkdel av de funktioner som finns i regexp

<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_5t9v.asp>

Om du har SQL server 2000 så kan du skriva en funktion som kontrollerar om värdet uppfyller villkoret.

Permalänk: https://www.webforum.nu/p/736330

## #3 — Web-Tor, 2002-07-31T08:04Z

Aj! Det var inte bra. :(

> Om du har SQL server 2000 så kan du skriva en funktion som kontrollerar om värdet uppfyller villkoret.

Är det svårt? Jag har inte jobbat med MSSQL tidigare.

Permalänk: https://www.webforum.nu/p/736831

## #4 — Web-Tor, 2002-07-31T12:12Z

Jag fick förslaget från en kollega att man kanske kunde använda "subselects". Jag har aldrig gjort det så jag har ingen aning om det skulle funka. Kanske nåt i stil med det här skulle fungera:

```
{
 SELECT * FROM tabell WHERE kolumn LIKE %Sökord% [i]men inte[/i]

 {
 &nbsp; SELECT [i]allt som står inom taggar[/i]
 }

}
```

 :q

Permalänk: https://www.webforum.nu/p/737176

## #5 — LarsG, 2002-07-31T12:13Z

otestad kod

Det problem som man inte kan kontrollera med like är om det finns noll eller flera förkomster av en sträng.

Som jag ser det så måste du titta på tecken för tecken och hålla reda på status (t.ex. om du har hittat \< men ingen \> är en viss status.) 

```
create function wt_regexp(@str varchar(200),@search varchar(30)) returns int
as
begin
declare @l,@p,@s int
select @l = len(str), @p = 1,@s = 0
while @p <= @l
begin
    if substring(@str,@p,1) = '<' @s = @s + 1
    else if substring(@str,@p,1) = '>' @s = @s - 1
    else if @s = 0 and 
           substring(@str,@p,len(@search)) = @search return 1
    set @p = @p + 1
end
return 0
```

I princip alltså (jag har inte kollat alla detaljer i ditt regexp)

sen så kan du använda      

```
$q= "SELECT kol FROM tabell WHERE wt_REGEXP(kol,'$SearchWord' > 0") or die ("Fel");
```

Det är enklare att plocka upp all data till PHP och använda eregi_test. Det kanske går på ett ut prestandamässigt eftersom Tsql-funktionen inte kan bli speciellt effektiv. 

Det blir ju olika kod för olika DBMS, men jag ser inte hur du kan undvika det i alla fall.

Permalänk: https://www.webforum.nu/p/737179

## #6 — LarsG, 2002-07-31T12:19Z

Det där med subselect får jag inte till riktigt

Om du söker efter 'nisse' i en kolumn med värdet 

'\<nisse\> nisse' 

så skall du väl få träff? Eller kan värdena i kolumnen bara se ut enligt vissa mönster?

Permalänk: https://www.webforum.nu/p/737193

## #7 — Web-Tor, 2002-07-31T12:26Z

> Om du söker efter 'nisse' i en kolumn med värdet 
> 
> '\<nisse\> nisse' 
> 
> så skall du väl få träff?

Helt riktigt! Du ska få träff (men inte på det nisse som står inom hakar).

Det där med subselects var bara en chansning. ;)

Permalänk: https://www.webforum.nu/p/737204

## #8 — Web-Tor, 2002-09-02T13:32Z

Jag lyfter upp den här frågan.

> Om du har SQL server 2000 så kan du skriva en funktion som kontrollerar om värdet uppfyller villkoret.

Hur gör jag detta?
Har inte jobbat med SQL-server 2000 tidigare. ;)

Permalänk: https://www.webforum.nu/p/770512

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/49061-regexp-i-mssql
