2012-07-25 154 views
2

我知道這個線程遍佈整個地方,但是,這是一個稍微不同的情況。 在我公司使用的套件中,我對SQL的訪問權限有限,無法使用函數等運行復雜的代碼。我有一個SQL查詢,它將數據在多列上編譯到一列中,並使用group by子句刪除多重。但是,這導致所有結果全部返回,因爲存在變化。現在我必須把它改回它應該是的,即每個單詞的首字母大寫。我需要一個非常簡潔的方式來做到這一點。該套件使用VBScript和XML,但這個特殊問題更復雜,因爲我無法在客戶端編輯結果,套件只是要求顯示列名(填充下拉菜單)。有什麼建議麼?謝謝!SQL - 大寫每個單詞的第一個字母

查詢:

Select Insurance 
From 
(Select Ins1 as Insurance 
From InsAuth2 
WHERE Ins1 IS NOT NULL 
Union All 
Select Ins2 as Insurance 
From InsAuth2 
WHERE Ins2 IS NOT NULL 
Union All 
Select Ins3 as Insurance 
From InsAuth2 
WHERE Ins3 IS NOT NULL 
Union All 
Select Ins4 as Insurance 
From InsAuth2 
WHERE Ins4 IS NOT NULL 
Union All 
Select Ins5 as Insurance 
From InsAuth2 
WHERE Ins5 IS NOT NULL) as table 
Group By Insurance 
+0

這裏看看:SQL服務器:使所有大寫,以正確的案例/標題案例](http://stackoverflow.com/a/230224/277290) – YetAnotherUser 2012-07-25 15:42:46

+1

你無法在客戶端修復此問題,並且無法使用服務器端的功能。你認爲你可以在哪裏影響正在發生的事情?如果您認爲您可以修改您的查詢,請發佈您的信息。還有什麼DBMS是這樣的? – 2012-07-25 15:44:23

+0

什麼redfilter建議的作品,但是,我需要多字兼容性 – eatonphil 2012-07-25 15:46:48

回答

11

你沒有說,這是對SQL Server,但這裏的情況下,一個解決方案是。

這是一個工作示例。將表變量@T替換爲您的查詢。

declare @T table(Insurance varchar(max)) 

insert into @T values 
('BENGT MIKAEL ERIKSSON'), 
('XMLCHARTEST<>&''"') 

select (
     select upper(T.N.value('.', 'char(1)'))+ 
       lower(stuff(T.N.value('.', 'varchar(max)'), 1, 1, ''))+' ' 
     from X.InsXML.nodes('/N') as T(N) 
     for xml path(''), type 
     ).value('.', 'varchar(max)') as Insurance 
from 
    (
    select cast('<N>'+replace(
        replace(
        replace(Insurance, 
        '&', '&amp;'), 
        '<', '&lt;'), 
        ' ','</N><N>')+'</N>' as xml) as InsXML 
    from @T 
) as X 

結果:

Insurance 
---------------------- 
Bengt Mikael Eriksson 
Xmlchartest<>&'" 
+0

friggin漂亮,thx – seekerOfKnowledge 2013-06-14 14:48:33

4

這將大寫字符串的第一個字母。如果有多個單詞,最好在應用程序層完成。您可能需要編寫一個SQL函數來執行此操作。

select upper(substring(MyColumn, 1, 1)) + substring(MyColumn, 2) 
from MyTable 

select upper(substring(MyColumn, 1, 1)) || substring(MyColumn, 2) 
from MyTable 
+0

如果它有多個詞怎麼樣? – eatonphil 2012-07-25 15:43:59

相關問題