【问题标题】:SQL - Capitalize first letter of each wordSQL - 将每个单词的首字母大写
【发布时间】:2012-07-24 02:33:32
【问题描述】:

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

【问题讨论】:

  • 您无法在客户端解决此问题,也无法在服务器端使用功能。你认为你可以在哪里真正影响正在发生的事情?如果您认为可以修改您的查询,请发布您的查询。还有这个 DBMS 是干什么用的?
  • redfilter 建议的工作,但是,我需要多字兼容
  • yetanotheruser,我无法在这个套件中使用这样的功能。
  • 我认为更好的问题是“为什么您的原始 Sql 查询导致您的结果全部大写?”我认为解决这个问题比尝试将每个单词的首字母大写更好。

标签: sql


【解决方案1】:

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

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

或

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

【讨论】:

  • 如果有多个单词怎么办?
【解决方案2】:

您没有说这是针对 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<>&'" 

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 2020-08-30
    • 2015-11-04
    • 2012-11-11
    • 1970-01-01
    • 2016-12-05
    • 2016-01-10
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多