1

4000文字を超えるかどうかを確認したいテキスト列があります。4000文字を超える場合は、右端の文字から始めて、4000文字に戻ります。

次のコードが正しくないことに気づきました。しかし、それは始まりです。

select 
case 
when datalength(column1) > 4000 then
right(column1, 4000)
case datalength(column1) <= 4000 then 
column1
end 
from table_1
4

3 に答える 3

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)を3回再計算しているので、素晴らしいことではありません。

編集

CTEを使用して1回だけ計算する:

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
于 2012-05-07T19:59:40.783 に答える
0

これはOracleで機能します。Substrに関するドキュメントは次のとおりです。http://psoug.org/definition/SUBSTR.htm

select (case when length(column1) > 4000 
             then substr(column1, -4000) 
             else column1 
        end) 
from table_1;
于 2012-05-07T20:22:32.807 に答える
-1

SQLServerの場合

SELECT
  CASE WHEN datalength(MyColumn) > 4000 THEN SUBSTRING(REVERSE(MyColumn), 1, 4000) ELSE MyColumn END AS MyGenCol
于 2012-05-07T19:49:21.650 に答える