SQLサーバーを使用して文字列を切り捨てる方法


105

SQL Serverに大きな文字列があります。その文字列を10または15文字に切り捨てたい

元の文字列

this is test string. this is test string. this is test string. this is test string.

希望の文字列

this is test string. this is ......

1
「希望の文字列」には、「元の文字列」からの28文字が含まれていますが、求めている「10または15」に近くはありません
KM。

回答:


158

長い文字列の数文字だけを返したい場合は、次のように使用できます。

select 
  left(col, 15) + '...' col
from yourtable

SQL Fiddle with Demoを参照してください。

これは文字列の最初の15文字を返し、...それを最後に連結します。

15未満の文字列が取得されないことを確認したい場合は...、次を使用できます。

select 
  case 
    when len(col)>=15
    then left(col, 15) + '...' 
    else col end col
from yourtable

SQL Fiddle with Demoを見る


2
元の文字列が15文字未満の場合でも、...適用されない場合は追加されます
KM。

@KM。文字列の長さをチェックするバージョンを追加
Taryn

2
colの長さがちょうど15の場合、left(col、15)を実行すると文字列全体が取得され、最後に '...'が配置されます。確かにより良い解決策は、「len(col)> 15の場合」をチェックすることです。
Murphybro2 2018

35

使用できます

LEFT(column, length)

または

SUBSTRING(column, start index, length)

83
このSOの質問は、tsqlで文字列を切り捨てる方法に対する答えを見つける最も簡単な方法です。この人が質問していなかったら、MSDNの記事に目を通し、私の人生を今は嫌っています...
DMac the Destroyer

4
@snaplemouton単純なことについて質問することは(悪い答えですが)(以前の答えは簡単に見つかりました)、結果はとにかく良いです。つまり、SOはあらゆる種類の質問への回答を保持することを目的としています(他の方法で簡単に見つけることができる質問についても)。
jahu 2014年

8
@snaplemouton; この質問/回答を検索したところ、結果の一番上にあったので、時間を大幅に節約できました。
AMissico、2014

9
さらに、MSDNは、TRUNCATE
pablete

4
@snaplemouton、私はGoogleでこの答えを見つけました。StackOverflowでGoogleのことを人々に教えるのをやめてください。将来のGoogle社員がそれを目にするからです。このサイトの大部分はGoogleの検索結果に表示されます。
Slothario 2016年

4

ここでの答えは素晴らしいと思いますが、シナリオを追加したいと思います。

文字列の長さを気にせずに、文字列の前面から特定の数の文字を削除したかったことがあります。RIGHT()とSUBSTRING()を使用してこれを行う方法はいくつかありますが、すべてが文字列の長さを知っている必要があるため、処理が遅くなる場合があります。

代わりにSTUFF()関数を使用しています:

SET @Result = STUFF(@Result, 1, @LengthToRemove, '')

これにより、不要な文字列の長さが空の文字列に置き換えられます。


4

Cast()オペレーションを使用することもできます。

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name

テキストファイルに出力するときは、出力テキストファイルのその列に新しい文字数のみが割り当てられるため、これが一番好きです。(たとえば、1000ではなく50)よりコンパクトな結果。
BillDarcy 2015

1

以下を使用することもできます。iifはcaseステートメントを回避し、必要な場合にのみ省略記号を追加し(SQL Server 2012以降でのみ有効)、caseステートメントはよりANSI準拠です(ただし、より詳細です)。

SELECT 
  col, LEN(col), 
  col2, LEN(col2), 
  col3, LEN(col3) FROM (
  SELECT 
    col, 
    LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2, 
    LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3 
  from (
      select 'this is a long string. One that is longer than 15 characters' as col
      UNION 
      SELECT 'short string' AS col
      UNION 
      SELECT 'string==15 char' AS col
      UNION 
      SELECT NULL AS col
      UNION 
      SELECT '' AS col
) x
) y

0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.