2

このスレッドがあちこちに存在することは知っていますが、これは少し異なるケースです。私の会社が使用しているスイートでは、SQL へのアクセスが制限されており、関数などを含む複雑なコードを実行できません。複数の列のデータを 1 つの列にコンパイルし、group by 句を使用して多重度を除外する SQL クエリがありました。ただし、これにより、バリエーションが存在するため、すべての結果がすべて大文字で返されました。ここで、本来あるべき状態に戻す必要があります。つまり、各単語の最初の文字を大文字にします。これを行うには非常に簡潔な方法が必要です。スイートは 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 に答える