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

在 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

最新更新