2016-03-31 11 views
2

の文字列の分離は、だから私は検索からある文字列を持っており、それは私が10文字で単語をカットしたい複数の単語を含めることができますSQL Serverの - 長さのカットオフ

DECLARE @SearchString varchar(255) = 'Administration Duplication' 

になる。すなわち:'Administra Duplicatio'

+0

.....のようになります。 – Squirrel

+0

申し訳ありませんが、テストなしで入力:@SearchStringを宣言するVarchar(255)= 'Administration Duplication' –

+0

あなたは実際に何を達成しようとしていますか? –

答えて

2

いくつかの変更とhereから:

Create Function dbo.[getFirstTenCharacters] 
(
    @String Varchar(Max) 
) 
RETURNS Varchar(Max) 
BEGIN 
Declare @Xml Xml 
Declare @firsttenletter Varchar(Max) 
Declare @delimiter Varchar(5) 

SET @delimiter=' ' 
SET @Xml = cast(('<a>'+replace(@String,@delimiter,'</a><a>')+'</a>') AS XML) 

;With CTE AS (SELECT A.value('.', 'varchar(max)') as [Column] 
FROM @Xml.nodes('a') AS FN(a)) 
SELECT @firsttenletter =Stuff((SELECT ' ' + LEFT([Column],10) 
FROM CTE 
FOR XML PATH('')),1,0,'') 

RETURN (@firsttenletter) 
END 
GO 


SELECT dbo.[getFirstTenCharacters]('Administration Duplication'); 

WORKING DEMO

enter image description here

+0

私のためには、これは、メッセージ4121、レベル16、状態1、行1をしなかった 列 "A"またはユーザー定義関数または集計"A.value"、または名前があいまいです。 –

+0

@GregWhite: - 確かに、同じコードを使用しましたか?それは私のために働いた。画像も追加されました! –

+0

@GregWhite: - デモも添付しました。あなたはそれを確認することができます:) http://sqlfiddle.com/#!6/ac9aa/1 –

0

文字列を分割する関数を作成します。 はこのようなものになります。

CREATE FUNCTION [dbo].[SPLIT_STRING](
@TEXT  varchar(8000) 
,@COLUMN int 
,@SEPARATOR varchar(1) 
)RETURNS varchar(8000) 
AS 
    BEGIN 
     DECLARE @POS_START int = 1 
     DECLARE @POS_END int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START) 

     WHILE (@COLUMN >1 AND @POS_END> 0) 
     BEGIN 
      SET @POS_START = @POS_END + 1 
      SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START) 
      SET @COLUMN = @COLUMN - 1 
     END 

     IF @COLUMN > 1 SET @POS_START = LEN(@TEXT) + 1 
     IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1 

     RETURN SUBSTRING (@TEXT, @POS_START, @POS_END - @POS_START) 
    END 

をTHEN DO:

SELECT LEFT([dbo].[SPLIT_STRING](COLNAME,1,' '),10)+LEFT([dbo].[SPLIT_STRING](COLNAME,2,' '),10) 
+0

問題私はそれが未知数の文字列を含んでいるということですが、私はこれが好きです。 –

+0

最初のパラメータは列、2番目は空白の前の最初の部分、3番目の文字は – SnakeFoot

+0

であり、空白の数はwhileループで、これは魅力のように動作します – SnakeFoot

2

をむしろ簡単なバージョンでも有効な構文ではありません

DECLARE @SearchString Varchar(255) = 'Administration Duplication' 


;WITH X AS (
     SELECT Split.a.value('.', 'VARCHAR(10)') Words 
     FROM 
      (SELECT Cast ('<X>' + 
       Replace(@SearchString, ' ', '</X><X>') + '</X>' AS XML) AS Data 
      ) AS t CROSS APPLY Data.nodes ('/X') AS Split(a) 
    ) 
SELECT STUFF((SELECT ' ' + Words 
       FROM X 
       FOR XML PATH(''), TYPE) 
       .value('.','NVARCHAR(MAX)'),1,1,'')