2017-07-11 15 views
1

各単語の最初の文字を大文字にする必要がありますが、SQL Serverへの送信時に既にテキストボックスに表示されている大文字を保持する必要があります。私は現在、私が呼び出すSQL関数を持っていますが、それは最初の文字を大文字にし、各単語の残りを小文字にします。私は必要なもの例えば され、現在の文字を変更せずに各単語の先頭文字を大文字にする

ジョン・スミス - ジョン・スミス
ABCは限ら - ABC限定

以下

は、私が現在持っているSQL関数です。

ALTER FUNCTION [dbo].[CAP_FIRST] (@InputString varchar(4000)) 
RETURNS VARCHAR(4000) AS BEGIN 

DECLARE @Index   INT DECLARE @Char   CHAR(1) DECLARE 
@PrevChar  CHAR(1) DECLARE @OutputString VARCHAR(255) 

SET @OutputString = LOWER(@InputString) SET @Index = 1 

WHILE @Index <= LEN(@InputString) BEGIN 
    SET @Char  = SUBSTRING(@InputString, @Index, 1) 
    SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' 
          ELSE SUBSTRING(@InputString, @Index - 1, 1) 
        END 

    IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') 
    BEGIN 
     IF @PrevChar != '''' OR UPPER(@Char) != 'S' 
      SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char)) 
    END 

    SET @Index = @Index + 1 END 

RETURN @OutputString 

END 
+0

の可能性のある重複した[SQL Server内の文字列の各単語の最初の文字を大文字にするための最良の方法は何ですか]( https://stackoverflow.com/questions/55054/what-s-the-best-way-to-capitalise-the-first-letter-of-each-word-in-a-string-in-s) –

+0

なぜあなたはクライアントの代わりにデータベースでこれをやろうとしていますか?すべての言語およびレポートツールには、大文字小文字を簡単に実行できる機能があります。 SQLは*ではありません。これは文字列操作言語ではありません –

+0

これはアプリケーションレイヤーで行うほうがはるかに簡単です – HoneyBadger

答えて

0

次の行が入力文字列全体を小文字にする責任があることが表示されます:

SET @OutputString = LOWER(@InputString) 

次に、機能選択アッパーケースを、それは、各単語の先頭であることを認識するものを。次の代入と上記の行を交換し、入力文字列の元の場合は、保存する必要があります。

SET @OutputString = @InputString 
+0

それはトリックに感謝しましたが、私はボード上のコメントを取って、私がC#で必要とするものをすることに決めました。 – Emma

+0

@Emma計画のように聞こえるかもしれませんが、この答えは機能を使用することを選択した人にとって役に立ちます。 –

関連する問題