您好我正在编写一些TSQL代码实践,尝试计算字符串中的元音,小写和大写字母,我的代码适用于元音,但不知何故它将所有字母都计为小写字母,这是我的代码:
DECLARE @name VARCHAR(200) ='Abc Efg Hij'
DECLARE @i int = 1
DECLARE @numVowels int = 0
DECLARE @numLower int = 0
DECLARE @numUpper int = 0
WHILE @i <= LEN(@name)
BEGIN
IF PATINDEX('%' + LOWER(SUBSTRING(@name, @i, 1)) + '%', 'aeiou') > 0
BEGIN
SET @numVowels += 1
END
IF SUBSTRING(@name, @i, 1) BETWEEN 'a' AND 'z'
BEGIN
SET @numLower += 1
END
ELSE IF SUBSTRING(@name, @i, 1) BETWEEN 'A' AND 'Z'
BEGIN
SET @numUpper += 1
END
PRINT SUBSTRING(@name, @i, 1)
SET @i +=1
END
PRINT 'There are ' + CAST((@numVowels) AS VARCHAR(200)) + ' vowels'
PRINT 'There are ' + CAST((@numLower) AS VARCHAR(200)) + ' lower-case letters'
PRINT 'There are ' + CAST((@numUpper) AS VARCHAR(200)) + ' upper-case letters'
请帮忙,谢谢
答案 0 :(得分:1)
你的问题与整理有关,但是一些测试在我的脑海中提出了比解决的问题更多的问题。首先,要使代码正常工作,您只需要替换以下两种情况:
IF SUBSTRING(@name, @i, 1) BETWEEN ...
与
IF SUBSTRING(@name, @i, 1) COLLATE Latin1_General_BIN BETWEEN ...
强制进行二进制排序规则会阻止SQL Server认为'a'
和'A'
相等。
现在我脑子里提出的问题是:
Latin1_General_CS_AS
(9小写,0大写)?这是我的第一次尝试,因为我期待您的问题是由不区分大小写的排序规则引起的,我预计它将通过区分大小写的方式解决SQL_Latin1_General_CP1_CS_AS
(8个小写,1个大写)?只有第一个'A'
不被视为小写字符,我不知道原因。这就是我从.NET开发人员的头脑中得到的全部内容。如果您正在寻找更多信息,可能此处或https://dba.stackexchange.com/的其他人可以提供更多信息。