---
title: "Ännu en sök och ersätt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/184958-ännu-en-sök-och-ersätt"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "G8"
published: "2010-10-18T09:51:01.000Z"
updated: "2011-03-11T11:50:56.000Z"
replies: 11
views: 2073
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/184958-ännu-en-sök-och-ersätt"
---

# Ännu en sök och ersätt

## #1 — G8, 2010-10-18T09:51Z

Försöker ersätta text i ett fält i mysql men får inte till det. All text i fältet inleds med t.ex. 'whatever - ' och vill ersätta detta med ingenting. Hittade en lösning från LarsG på ett likande problem men kan inte riktigt få det att funka för mig då de inledande orden är av olika längd.

```
update t set c = substring(c from X) where c like '% - '
```

Alternativt någon sorts trim där man tar bort det inledande...?

Hjälp hade vart mycket uppskattat.

//G8

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

## #2 — nitro2k01, 2010-10-18T11:45Z

För det första är ditt like-uttryck felaktigt. **'% - '** matchar strängar som slutar med **' - '** men inte strängar som innehåller **' - '** mitt i strängen. Jag gissar att du borde köra **'% - %'**.

Mitt svar är:

```
UPDATE t SET c = SUBSTRING(c, LOCATE(' - ', c) + 3);
WHERE c LIKE '% - %';
```

**LOCATE(' - ', c)** slänger ur sig positionen för första förekomsten av söksträngen. **\+3** lägger till 3 så att du hoppar över själva söksträngen. **SUBSTRING** plockar ut en del sträng från den angivna startpositionen till slutet. (Man kan även kontrollera längden med en tredje parameter.

**'Något - Mer text'** blir alltså till **'Mer text'**.

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

## #3 — LarsG, 2010-10-18T12:04Z

```
UPDATE t SET c = replace(c, 'Något -','') where c like 'Något -%'
```

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

## #4 — nitro2k01, 2010-10-18T12:07Z

LarsG, jag tror han menade att han inte vet vad som kommer innan ' - '. :)

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

## #5 — G8, 2010-10-18T12:24Z

nitro, ja du har helt rätt.. jag vet inte vad som kommer innan bindestrecket

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

## #6 — G8, 2010-10-18T12:25Z

Funkade klockrent nitro, tack för hjälpen båda två :)

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

## #7 — knislinge, 2011-03-10T16:40Z

Liknande problem

Jag har ett liknande problem där jag behöver ersätta en länk som finns i tusentals poster i en MS SQL server. Är i det närmsta novis på SQL-kod och klarar inte ens att modifiera denna enkla kod för mitt ändamål.  :q Jag har en tabell som heter dbo.tpc_topics. I den tabellen finns en kolumn som heter tpc_body. Den innehåller tusentals poster med en felaktig url. Jag vill alltså söka igenom den kolumnen och byta ut alla <http://gammalurl.se> till <http://nyurl.nu>. Nån som har något tips hur man modifierar scriptet för detta ändamål?

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

## #8 — @nders, 2011-03-11T05:44Z

Jag hade provat:

```
UPDATE tpc_topics 
SET tpc_body = REPLACE(tpc_body, 'http://gammalurl.se', 'http://nyurl.nu') 
WHERE tpc_body LIKE '%[url]http://gammalurl.se%[/url]'
```

mvh

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

## #9 — knislinge, 2011-03-11T11:02Z

Tack Anders! 
Verkligen snällt av dig att svara och dessutom så snabbt :) Din kod ser ut att vara exakt vad jag var ute efter! Dessvärre fungerar det ändå inte. Jag får följande fel: 
Msg 8116, Level 16, State 1, Line 1
Argument data type ntext is invalid for argument 1 of replace function. 

Texten i kolumnen är av typen ntext i en MS SQL 2005-server. Jag funderar på om det kan vara möjligt att ändra till något annat format för kolumnen, köra skriptet och sedan byta tillbaka till ntext? Kan det vara en lösning, eller behöver scriptet modifieras på något sätt? Jag kan även säga att det inte spelar någon roll om scriptet körs i hela databasen, men så vitt jag vet är det bara i just den kolumnen det behöver ändras...

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

## #10 — @nders, 2011-03-11T11:35Z

Man kan, som du märkte, inte köra REPLACE på text/ntext-fält - men du kan casta om till nvarchar(max) i frågan.

Det här borde fungera:

```
UPDATE tpc_topics 
SET tpc_body = REPLACE(CAST(tpc_body AS nvarchar(max)), 'http://gammalurl.se', 'http://nyurl.nu') 
WHERE tpc_body LIKE '%[url]http://gammalurl.se%[/url]'
```

Mvh

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

## #11 — knislinge, 2011-03-11T11:47Z

Tack  :e

Nu gick det som en dans  :p

Allt är ersatt utan några som helst problem! Du har varit till en otroligt stor hjälp och jag är väldigt tacksam!!!

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

## #12 — @nders, 2011-03-11T11:50Z

Varsågod - det är bara roligt att hjälpa till.  :)

mvh

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/184958-ännu-en-sök-och-ersätt
