Sql 获取用户名有不同大小写的用户总数

Sql 获取用户名有不同大小写的用户总数,sql,sql-server,regex,count,Sql,Sql Server,Regex,Count,我有一个SQL表,其中用户名有不同的大小写,例如“ACCOUNTS\Ninja.Developer”或“ACCOUNTS\Ninja.Developer” 我想找出用户名首字母大写和姓氏首字母大写的记录数?如何使用正则表达式查找总数 x table User "ACCOUNTS\James.McAvoy" "ACCOUNTS\michael.fassbender" "ACCOUNTS\nicholas.hoult" "ACCOUNTS\Oscar.Isaac

我有一个SQL表,其中用户名有不同的大小写,例如“ACCOUNTS\Ninja.Developer”或“ACCOUNTS\Ninja.Developer”

我想找出用户名首字母大写和姓氏首字母大写的记录数?如何使用正则表达式查找总数

x table 
User 

    "ACCOUNTS\James.McAvoy"
    "ACCOUNTS\michael.fassbender"
    "ACCOUNTS\nicholas.hoult"
    "ACCOUNTS\Oscar.Isaac"

你的问题有点含糊,但是

您可能正在查找
DISTINCT
命令

我认为你不需要正则表达式

也许你可以这样做:

  • 从表X中获取不同的名称作为表A
  • 将表A中的输入用作表X中的where子句
  • 计数
  • 联合
我希望这有帮助,
Rhys

根据您的示例集,您可以使用多种技术的组合。首先,如果用户名始终以“ACCOUNTS\”开头,则可以使用substr选择以“\”字符开头的字符

关于名字: 然后,您可以使用正则表达式函数查看它是否与[a-Z]或[a-Z]匹配,假设您的用户名必须以字母字符开头

至于姓氏: 在substr上使用instr函数并搜索字符“.”,然后再次应用regex函数与[A-Z]或[A-Z]进行匹配,以查看姓氏是以大写还是小写字符开头

总计:
选择第一个和最后一个与上一个匹配的所有匹配项,并进行计数。对较低的匹配重复上述步骤,您将得到两个总数。

您想要这样的结果吗

select count(*)
from t
where name rlike 'ACCOUNTS\[A-Z][a-z0-9]*[.][A-Z][a-z0-9]*'
当然,不同的数据库实现正则表达式的方式不同,因此实际的比较器可能不像
rlike

在SQL Server中,您可以执行以下操作:

select count(*)
from t
where name like 'ACCOUNTS\[A-Z][^.][.][A-Z]%';

您可能需要确保具有区分大小写的排序规则。

在大多数情况下,MS SQL字符串排序规则不区分大小写,因此我们需要一些技巧。以下是一个例子:

declare @accts table(acct varchar(100))
--sample data
insert @accts values
('ACCOUNTS\James.McAvoy'),
('ACCOUNTS\michael.fassbender'),
('ACCOUNTS\nicholas.hoult'),
('ACCOUNTS\Oscar.Isaac') 

;with accts as (
select 
--cleanup and split values
left(replace(acct,'ACCOUNTS\',''),charindex('.',replace(acct,'ACCOUNTS\',''),0)-1) frst,
right(replace(acct,'ACCOUNTS\',''),charindex('.',replace(acct,'ACCOUNTS\',''),0)) last
from @accts
)
,groups as (--add comparison columns
select frst, last, 
case when CAST(frst as varbinary(max)) = CAST(lower(frst) as varbinary(max)) then 'lower' else 'Upper' end frstCase, --circumvert case insensitive
case when CAST(last as varbinary(max)) = CAST(lower(last) as varbinary(max)) then 'lower' else 'Upper' end lastCase
from accts
)
--and gather fruit
select frstCase, lastCase, count(frst) cnt
from groups
group by frstCase,lastCase

你能澄清你的问题吗?“大写且全部小写的记录数”是什么意思?你到底想合计多少?我想找出用户名的首字母大写和姓氏大写的记录数?你使用的是什么数据库?请适当地标记。我添加了标记,它是SQLserver@NinjaDeveloper . . . 您有支持正则表达式的扩展吗?它们不是内置在SQL Server中的。