例如,我有一列以大写字母的字符串值开头,然后以小写字母继续:
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 一起使用,无论我将整理信息放在哪里。
试试这个
DECLARE @string VARCHAR(MAX)
SET @string = 'THIS SENTENCE IS IN UPPERCASE and this in lower case'
SELECT SUBSTRING(@string
,PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%',@string COLLATE SQL_Latin1_General_CP1_CS_AS)
, PATINDEX('%[abcdefghijklmnopqrstuvwxyz]%',@string COLLATE SQL_Latin1_General_CP1_CS_AS)-1)
上述解决方案仅考虑一个句子的单词大写,然后是小写单词。
Jeff Moden 等人使用计数表编写了一个字符串拆分器。
我复制了这个函数并将其安装在我的数据库中。
cte_Split_On_Spaces 将所有单词分开。不考虑标点符号。
然后,将字符串整理为区分大小写、区分重音的单词。如果大写与正常单词匹配,则为大写。
此解决方案在字符串中查找所有大写单词并按顺序列出它们。
您可以轻松地将其放回字符串中。
真挚地
John Miner 狡猾的 Dba www.craftydba.com
--
-- http://www.sqlperformance.com/2012/08/t-sql-queries/splitting-strings-follow-up
; 使用 cte_Split_On_Spaces 作为 ( select * from [dbo].[DelimitedSplitN4K] ('THIS SENTENCE IS IN UPPERCASE and this in lower case', ' ') ) 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)