2011-08-30 20 views
0

我生成從數據庫列的用戶界面標籤在我的應用程序的一大(資本)之間插入空格和。在做這件事時,我遇到了一個問題。與我的數據庫表中相同的列名正在顯示在我想更改的UI中。
我有樣本數據是這樣的:SQL格式化在有條件的方式串之類的小字母

ProductionIssueID 
MAXSerialNo 
ProductID 
Item 

我想他們格式化這樣的:

Production Issue ID 
MAX Serial No 
Product ID 
Item 

的邏輯是:
1.當英文大寫字母成功的小字母然後一個空間已被插入如圖生產問題ID
2.當小字母成功資本一個然後空間作爲MAX序列號和產品ID
3中給出如果有ONL已經被插入Y的一個英文大寫字母來什麼事都沒有做,如項
4是一對類似的資本/小字母之間無需空間。

請幫我實現這一目標。這些例子更具描述性。

預先感謝您的寶貴時間和精力。

+2

應該能夠調整這裏的一個答案通過TSQL http://stackoverflow.com/q/230138/73226做改造,但你真的需要無論您的表示層語言如何,都可以這樣做,因爲您無法使用動態SQL更改發回的列名稱。 –

+0

@Smith,每個列名都保存在一個主表中。我從主表列而不是直接從列生成用戶界面。 – Nagesh

+0

你用什麼來生成用戶界面? 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: 我改變的功能。它現在應該能夠處理空間。

PRINT dbo.fn_InitCapWord('Production IssueID') 

OUTPUT:

Production Issue ID 
+0

存在一個問題,如果InputString在字符之間有空格,則該函數掛起。請糾正它。 – Nagesh

+0

我改變了功能。它現在應該能夠處理空間。 – EricZ

0

SQL意味着/善於處理關係數據。在演示文稿端進行字符串操作總是一個好習慣。 如果你仍然想要,你可以創建一個CLR函數並使用它。

0

我同意這純粹是一個演示文稿問題,最好是在表示層完成。這裏有一個先前的問題,給你幾個建議(使用和不使用正則表達式)

add-spaces-before-capital-letters