SQL - 将每个单词的首字母大写

时间:2012-07-25 15:39:08

标签: sql

我知道这个线程遍布整个地方,但是,这是一个稍微不同的情况。 在我公司使用的套件中,我对SQL的访问权限有限,无法运行带有函数等的复杂代码。我有一个SQL查询,它将多列上的数据编译成一列,并使用group by子句来清除多重性。但是,这导致所有结果都以全部大写字母返回,因为存在差异。我现在必须将它改回原来的样子,即每个单词的首字母大写。我需要一种非常简洁的方法来做到这一点。该套件使用VBScript和XML,但这个特殊问题更复杂,因为我无法在客户端编辑结果,套件只是要求显示列名称(填充下拉菜单)。有什么建议?谢谢!

查询:

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

2 个答案:

答案 0 :(得分: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<>&'" 

答案 1 :(得分:4)

这将大写字符串的第一个字母。如果有多个单词,最好在应用程序层中完成。您可能需要编写一个SQL函数来执行此操作。

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

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