Sql 获取用户名有不同大小写的用户总数
我有一个SQL表,其中用户名有不同的大小写,例如“ACCOUNTS\Ninja.Developer”或“ACCOUNTS\Ninja.Developer”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
我想找出用户名首字母大写和姓氏首字母大写的记录数?如何使用正则表达式查找总数
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中的。