我同意這應該表現層上完成。但是,這個功能可以得到你所需要的。
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
應該能夠調整這裏的一個答案通過TSQL http://stackoverflow.com/q/230138/73226做改造,但你真的需要無論您的表示層語言如何,都可以這樣做,因爲您無法使用動態SQL更改發回的列名稱。 –
@Smith,每個列名都保存在一個主表中。我從主表列而不是直接從列生成用戶界面。 – Nagesh
你用什麼來生成用戶界面? TSQL中的字符串函數是有限的。你的開發環境是否支持正則表達式? As別名必須經過硬編碼,因此您不能動態更改TSQL返回的列名稱。 – Paparazzi