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?
7 svar · 220 visningar · startad av Web-Tor
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?
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.
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.
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]
{
SELECT [i]allt som står inom taggar[/i]
}
}
:q
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.
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?
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. ;)
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. ;)