2012-07-25 106 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

相关问题