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
Другие вопросы по тегам