2

我知道这个线程无处不在,但是,情况略有不同。在我公司使用的套件中,我对 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
4

2 回答 2

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<>&'" 
于 2012-07-25T17:23:20.447 回答
4

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

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

或者

select upper(substring(MyColumn, 1, 1)) || substring(MyColumn, 2)
from MyTable
于 2012-07-25T15:42:36.460 回答