Here is my example. When I run this query:
SELECT SUBSTRING('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae odio tellus, sit amet facilisis neque. Cras sapien nulla, suscipit non imperdiet ac, aliquet vitae lectus. Nulla a varius dolor. Nunc convallis, augue et fermentum volutpat, lectus urna sagittis risus, vel iaculis diam est convallis lectus. Suspendisse potenti. Morbi malesuada tristique varius.', 1, 300)
I get the first 300 chars of the sentence. That is good. Except that I want it to end where the last dot (.) is in the result.
So the query result is this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae odio tellus, sit amet facilisis neque. Cras sapien nulla, suscipit non imperdiet ac, aliquet vitae lectus. Nulla a varius dolor. Nunc convallis, augue et fermentum volutpat, lectus urna sagittis risus, vel iaculis diam est convalli
But I want it to be this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae odio tellus, sit amet facilisis neque. Cras sapien nulla, suscipit non imperdiet ac, aliquet vitae lectus. Nulla a varius dolor.
Can I do that with a MySQL query, and how?
Tnx
UPDATE 1,
This is what I had so far:
SET @longtext = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae odio tellus, sit amet facilisis neque. Cras sapien nulla, suscipit non imperdiet ac, aliquet vitae lectus. Nulla a varius dolor. Nunc convallis, augue et fermentum volutpat, lectus urna sagittis risus, vel iaculis diam est convallis lectus. Suspendisse potenti. Morbi malesuada tristique varius.';
SELECT SUBSTRING_INDEX(
@longtext,
SUBSTRING_INDEX(
SUBSTRING(
@longtext,
1,
300
),
'.',
-1
)
, 1
);
UPDATE 2,
Tnx @Ben
My solution is:
SET @longtext = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae odio tellus, sit amet facilisis neque. Cras sapien nulla, suscipit non imperdiet ac, aliquet vitae lectus. Nulla a varius dolor. Nunc convallis, augue et fermentum volutpat, lectus urna sagittis risus, vel iaculis diam est convallis lectus. Suspendisse potenti. Morbi malesuada tristique varius.';
SELECT SUBSTRING(
@longtext,
1,
300 - ifnull(
LOCATE(
'.',
REVERSE(
SUBSTRING(
@longtext,
1,
300
)
)
),
1)
);
Okay, so I think I’ve got it; comments are unfortunately in reverse due to the nature of the thing…
You can change the 300 as you wish.