2

例如,我有一列以大写字母的字符串值开头,然后以小写字母继续:

THIS SENTENCE IS IN UPPERCASE and this in lower case

有没有办法选择包含大写字母的子字符串?

4

3 回答 3

1
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 一起使用,无论我将整理信息放在哪里。

于 2013-07-18T12:11:57.570 回答
0

试试这个

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)

参考链接

于 2013-07-18T12:28:32.313 回答
0

上述解决方案仅考虑一个句子的单词大写,然后是小写单词。

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)

于 2013-07-18T14:04:07.607 回答