名称更正
随着婚礼季节的到来,John已经获得了在婚礼卡上打印客人姓名的工作。 John编写的代码只打印那些以大写字母开头的名称,并拒绝那些以小写字母或特殊字符开头的名称。
您的工作是执行以下操作:
1.更正被拒绝的名称(以小写字母或特殊字符开头的名称)。您必须将被拒绝的名称的第一个字母更改为大写字母,如果是特殊字符,则不会更改。
2.按升序输出新更正的名称。
表格格式
表:人
字段类型
名称varchar(20)
示例人员表
的名称
莫希特
注:Kunal
马诺
拉吉
蔡健雅
@man
示例输出表
名称
@man
Manoj
莫希特
坦尼亚
尝试解决方案:在SQL SERVER 2014中
select name
from person as per
where (left(per.name,1) like '%[^A-Z]%' or left(per.name,1) like '% %')
union
select Upper(left(per.name,1))+right(per.name,len(per.name)-1)
from person as per
where left(per.name,1)<>left(Upper(per.name),1)
collate Latin1_General_CS_AI
order by per.name
示例测试案例通过,
在某些竞争对手的考试中仍然得到错误答案。
请建议我没有处理的测试用例。
答案 0 :(得分:1)
由于您只想更正小写并在第一个字符位置报告特殊字符,我会使用ascii比较而不是正则表达式。
select name, ascii(left(name,1)),
case
when ascii(left(name,1)) between 97 and 122 then
concat(char(ascii(left(name,1)) - 32),substring(name,2,len(name) -1))
else name
end name
from t
where ascii(left(name,1)) <= 64 or
ascii(left(name,1)) >= 91