名称更正

时间:2017-01-15 07:48:13

标签: sql sql-server sql-server-2014

名称更正

随着婚礼季节的到来,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

示例测试案例通过,
在某些竞争对手的考试中仍然得到错误答案。 请建议我没有处理的测试用例。

1 个答案:

答案 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