SQL: взять последние 4000 символов из текста
У меня есть текстовый столбец, который я хочу увидеть, если он имеет более 4000 символов. Если в нем более 4000 символов, начните с самого правого символа и вернитесь назад к 4000 символов.
Я понимаю, что следующий код не является правильным. Но это только начало.
select
case
when datalength(column1) > 4000 then
right(column1, 4000)
case datalength(column1) <= 4000 then
column1
end
from table_1
3 ответа
Решение
В SQL Server:
SELECT CASE
WHEN (DATALENGTH(column1) > 4000)
THEN SUBSTRING(column1, DATALENGTH(test) - 3999, DATALENGTH(column1))
ELSE column1
END
FROM table_1
Не фантастика, так как вы пересчитываете DATALENGTH(column1) три раза.
РЕДАКТИРОВАТЬ
Расчет только один раз с использованием CTE:
WITH CTE AS
(
SELECT DATALENGTH(column1) AS LENGTH, column1 FROM table_1
)
SELECT CASE
WHEN (LENGTH > 4000)
THEN SUBSTRING(column1, LENGTH - 3999, LENGTH)
ELSE column1
END
FROM CTE
Это работает в Oracle. Вот документация по Substr: http://psoug.org/definition/SUBSTR.htm
select (case when length(column1) > 4000
then substr(column1, -4000)
else column1
end)
from table_1;
В SQL Server
SELECT
CASE WHEN datalength(MyColumn) > 4000 THEN SUBSTRING(REVERSE(MyColumn), 1, 4000) ELSE MyColumn END AS MyGenCol