2011-08-30 10 views
0

私のアプリケーションのデータベース列からユーザーインターフェイスラベルを生成しています。これをしている間、私は問題を見つけました。変更したいUIに、データベーステーブルと同じ列名が表示されています。
私はこのようなサンプルデータを持っている:大文字と小文字の間にスペースを挿入するなどの条件付きで文字列を書式設定するSQL

ProductionIssueID 
MAXSerialNo 
ProductID 
Item 

私はこのようにそれらをフォーマットしたい:

Production Issue ID 
MAX Serial No 
Product ID 
Item 

ロジックは次のとおりです。
1.資本アルファベットは、その後のスペースを小さなアルファベットを成功生産問題ID
のように挿入する必要があります。2.小さなアルファベットが大文字の後に続く場合は、MAXシリアル番号と製品IDに指定されているとおりにスペースを挿入する必要があります。
3. Onl 1つの大文字アルファベットは、項目
のようにする必要はありません。4.同様の大文字/小文字アルファベットの間にスペースは必要ありません。

これを達成するために手伝ってください。例はより説明的です。

貴重な時間と労力をいただきありがとうございます。

+2

がTSQL http://stackoverflow.com/q/230138/73226経由で変換を行うためにここに答えの一つを調整することができるはずですが、本当にあなたがする必要があるだろう動的SQLを使用せずに戻された列名を変更できないため、プレゼンテーション層言語が何であれ、これを実行します。 –

+0

@Smith各列名は、いずれかのマスターテーブルに保存されます。私は、列から直接ではなく、マスター表の列からUIを生成しています。 – Nagesh

+0

UIを生成するために何を使用していますか? TSQLの文字列関数は制限されています。開発環境は正規表現をサポートしていますか? Asエイリアスは、TSQLによって返された列名を動的に変更できないように、ハードコードされている必要があります。 – Paparazzi

答えて

2

があります。しかし、この関数は必要なものを得ることができます。

CREATE FUNCTION [dbo].[fn_InitCapWord] (@InputString varchar(1000)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 

DECLARE @Index   INT 
DECLARE @OutputString VARCHAR(1000) 
DECLARE @substr VARCHAR(1000) 

SET @OutputString = '' 

WHILE (LEN(@InputString) > 0) 
BEGIN 
    IF (SUBSTRING(@InputString ,2,1) COLLATE Latin1_General_BIN LIKE '%[A-Z]%') 
      SELECT @Index = PATINDEX('%[a-z]%',SUBSTRING(@InputString,2,999) COLLATE Latin1_General_BIN) -1 
    ELSE 
      SELECT @Index = PATINDEX('%[A-Z]%',SUBSTRING(@InputString,2,999) COLLATE Latin1_General_BIN) 

    SELECT @substr = 
     CASE WHEN @Index >= 1 
      THEN SUBSTRING(@InputString,1,@Index) 
      ELSE @InputString 
     END      
    SELECT @OutputString = @OutputString + RTRIM(@substr) + ' ' 
    SELECT @InputString = RIGHT(@InputString,CASE WHEN @Index<=0 THEN 0 ELSE LEN(@InputString) - @Index END) 
END 

RETURN RTRIM(@OutputString) 
END 

例:

PRINT dbo.fn_InitCapWord('ProductionIssueID') 
PRINT dbo.fn_InitCapWord('MAXSerialNo') 
PRINT dbo.fn_InitCapWord('ProductID') 
PRINT dbo.fn_InitCapWord('Item') 

OUTPUT:

Production Issue ID 
MAX Serial No 
Product ID 
Item 

UPDATE: Iは、機能を変更しました。今はスペースを処理できるはずです。

PRINT dbo.fn_InitCapWord('Production IssueID') 

OUTPUT:

Production Issue ID 
+0

InputStringに文字間にスペースが含まれていて、関数がハングすると問題が発生します。それを修正してください。 – Nagesh

+0

私は機能を変更しました。今はスペースを処理できるはずです。 – EricZ

0

SQLは、リレーショナルデータを処理するためのものです。プレゼンテーション側で文字列操作を行うのは常に良い方法です。 CLR関数を作成して使用することができます。

0

私は、これは単なるプレゼンテーションの問題であり、プレゼンテーションレイヤーで最もうまくいくことに同意します。私は、これはプレゼンテーション層の上に行われるべきで同意(とし、正規表現なしの両方)あなたにいくつかの提案を与え、ここで前の質問

add-spaces-before-capital-letters