---
title: "LEFT(), men ändå inte"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/103374-left-men-ändå-inte"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "K@llen"
published: "2004-05-11T14:33:47.000Z"
updated: "2004-05-11T19:39:09.000Z"
replies: 7
views: 284
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/103374-left-men-ändå-inte"
---

# LEFT(), men ändå inte

## #1 — K@llen, 2004-05-11T14:33Z

Hej,

Jag har en sql-fråga som ser ut så här:

```
$sql = "SELECT a.articleId, a.subject, LEFT(a.copy, 180) AS copy, a.pubDate, u.userId 
FROM Article a
INNER JOIN User u
ON a.authorId = u.userId
ORDER BY " . $order . " DESC 
LIMIT 5";
```

 

Nu hugger den som väntat texten exakt efter 180 tecken. Detta blir ganska fult. Kan jag i **MySQL** men någon strängfunktion välja efter antal ord från vänster? Eller på annat smart sätt slippa avhuggna ord.

Detta är kanske något jag får fixa i PHP, men dumt att hämta hela texten om jag bara ska använda ca 180 tecken.

mvh jörgen

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

## #2 — cyprys, 2004-05-11T15:06Z

Kan du inte bara hämta drygt 180 tecken och sen hugga av texten vid sista mellanrummet i strängen?

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

## #3 — LarsG, 2004-05-11T15:12Z

```
select substring(str from 1 for 
case when position(' ' in str) = 0 then 180
     else 180 - position(' ' in reverse(str)) end)
from t
```

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

## #4 — K@llen, 2004-05-11T17:31Z

Hej igen,

Tack för era svar. Jag får dock inte det att fungera riktigt. Första biten i texten:

> Sveriges Television och Sveriges Radio har båda beslutat att börja sända digitala sändningar istället för analogt. Jag anser att det är ett hot mot säkerheten och integriteten.

 

SQL-fråga som den ser ut nu:

```
$sql = "SELECT substring(a.copy from 1 for 
case when position(' ' in a.copy) = 0 then 180
else 180 - position(' ' in reverse(a.copy)) end) AS copy
FROM Article a
INNER JOIN User u
ON a.authorId = u.userId
ORDER BY " . $order . " DESC 
LIMIT 5";
```

 

Resultat:

> Sveriges Television och Sveriges Radio har båda beslutat att börja sända digitala sändningar istället för analogt. Jag anser att det är ett hot mot säkerheten och i

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

## #5 — LarsG, 2004-05-11T17:41Z

```
$sql = "SELECT substring(a.copy from 1 for 
case when char_length(a.copy) <= 180 then char_length(a.copy) 
when position(' ' in a.copy) = 0 then 180
else 180 - position(' ' in reverse(a.copy)) end) AS copy
FROM Article a
INNER JOIN User u
ON a.authorId = u.userId
ORDER BY " . $order . " DESC 
LIMIT 5";
```

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

## #6 — K@llen, 2004-05-11T18:47Z

Tack LarsG, men det blir tyvärr exakt samma resultat. :(

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

## #7 — LarsG, 2004-05-11T19:27Z

```
SELECT substring(a.copy from 1 for
case when char_length(a.copy) <= 180 then char_length(a.copy)
when position(' ' in a.copy) = 0 then 180
else 180 - position(' ' in reverse(substring(a.copy from 1 for 180))) end) AS copy   
FROM artikel as a;
```

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

## #8 — K@llen, 2004-05-11T19:39Z

Vad skulle man göra utan ett geni som LarsG? ;)

Tusen tack, hoppas jag kan få tillfälle att hjälpa dig någon gång.  :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/103374-left-men-ändå-inte
