たとえば、大文字の文字列値で始まり、小文字で続く列があります。
THIS SENTENCE IS IN UPPERCASE and this in lower case
大文字を含む部分文字列を選択する方法はありますか?
たとえば、大文字の文字列値で始まり、小文字で続く列があります。
THIS SENTENCE IS IN UPPERCASE and this in lower case
大文字を含む部分文字列を選択する方法はありますか?
DECLARE @searchtext VARCHAR(100) = 'THIS SENTENCE IS IN UPPERCASE and this in lower case'
DECLARE @i INT = 1, @l INT = LEN(@searchtext)
WHILE (@i <= @l AND 1 = CHARINDEX(UPPER(LEFT(@searchtext,@i)),@searchtext COLLATE Latin1_General_CS_AS))
BEGIN
SET @i = @i+1
END
SELECT RTRIM(LEFT(@searchtext, @i-1))
照合情報をどこに置いても、PATINDEX で動作させることができません。
上記のソリューションは、大文字の後に小文字の単語が続く 1 つの文の単語のみを考慮します。
Jeff Moden らは、タリー テーブルを使用した文字列分割器を作成しました。
この関数をコピーしてデータベースにインストールしました。
cte_Split_On_Spaces はすべての単語を分割します。句読点を考慮しません。
次に、文字列は大文字と小文字を区別し、アクセントを区別する単語に照合されます。大文字が通常の単語と一致する場合は、大文字です。
このソリューションは、文字列内のすべての大文字の単語を検索し、それらを順番にリストします。
簡単に文字列に戻すことができます。
心から
John Miner The Crafty Dba www.craftydba.com
--
-- http://www.sqlperformance.com/2012/08/t-sql-queries/splitting-strings-follow-up
; with cte_Split_On_Spaces as ( select * from [dbo].[DelimitedSplitN4K] ('この文は大文字で、これは小文字', ' ') ) select s.ItemNumber, s.Item from cte_Split_On_Spaces s where s.Item COLLATE SQL_Latin1_General_CP1_CS_AS = UPPER(s.Item COLLATE SQL_Latin1_General_CP1_CS_AS)