SQL Server 判断数据行是否有两个相等的母音

xhv8bpkk  于 2022-11-21  发布在  其他
关注(0)|答案(2)|浏览(102)

如何在SQL Server中确定一列是否有两个相等的元音?
例如,'maria'有两个'a'字符。

select
    *
from
    hr.locations
where
    state_province is null
    and
    city like '...'  <-- ?
uxhixvfz

uxhixvfz1#

您想要查找一个元音多次出现的字符串。您已经有了city like '...'
现在,您可能已经想到了city like '%[aeiou]%<the same vowel>%',并且您想知道如何使<the same vowel>工作。这样的引用在LIKE中是不可用的。city like '%a%a%'。然后使用OR表示不同的元音:

select *
from hr.locations
where state_province is null
and
(
  city like '%a%a%' or
  city like '%e%e%' or
  city like '%i%i%' or
  city like '%o%o%' or
  city like '%u%u%'
);

如果您的city列区分大小写,并且您希望在一个A为大写而另一个为小写的情况下找到'安娜',则将此设置为lower(city) like '%a%a%'

ef1yzkbh

ef1yzkbh2#

如果您的目的是查找包含恰好两个相等元音的条目:
找出某个字符(在您的例子中是元音)在字符串中出现的频率的一种方法是首先计算整个字符串的长度。
第二步,用一个空字符串替换你的字符,并建立新字符串的长度。这将是没有出现该字符的所有字符的长度。
如果整个长度减去新的长度为2,这意味着字符在字符串中恰好出现了两次。因此,您可以创建一个查询,对每个元音都重复这个想法,如下所示:

SELECT yourcolumn
FROM yourtable
WHERE
LEN (yourcolumn) - LEN(REPLACE(yourcolumn,'a','')) = 2
OR LEN (yourcolumn) - LEN(REPLACE(yourcolumn,'e','')) = 2
OR LEN (yourcolumn) - LEN(REPLACE(yourcolumn,'i','')) = 2
OR LEN (yourcolumn) - LEN(REPLACE(yourcolumn,'o','')) = 2
OR LEN (yourcolumn) - LEN(REPLACE(yourcolumn,'u','')) = 2;

如果您的目的是查找包含至少两个相等元音的条目:只需将“=”替换为“〉=”或使用LIKE即可。
请在此处试用:db<>fiddle

相关问题