如何从sql中只包含数字的表中查找姓氏?

时间:2016-12-27 05:05:20

标签: mysql sql

我正在准备来自互联网的SQL面试问题,我坚持以下问题。

db.getCollection('collectionName').aggregate([
  {$unwind:"$squad.members"},
  {$group:{_id:"$_id",count:{$sum:{$cond: [{$eq: ['$squad.members.empty', true]}, 1, 0]}}}},
  {$match: {count: {$gte: 3}}}
])

我已经从互联网上复制了答案,但我不确定这个答案背后的原因

根据我的理解,问题是我必须选择仅包含数字的姓氏,这些数字意味着那些具有数字值的名称?问题是要求我们计算姓氏的数值(ASCII值)吗?如果我的理解是错误的,请告诉我。

5 个答案:

答案 0 :(得分:2)

Select * from EMPLOYEE where LAST_NAME REGEXP '^[0-9]+$'

问题是找到列LAST_NAME只有数字的所有行。您不必计算姓氏的ASCII值。您可以使用上面的查询。它使用正则表达式来查找所需的行。

答案 1 :(得分:1)

这意味着您必须选择仅包含1234数字的姓氏。 如果lastname仅包含字母和数字,则答案有效。因为如果有任何字母,那么它们的大小写不会相等。但是这并不考虑姓氏可能包含其他字符的情况,例如!#etc

答案 2 :(得分:1)

其实你的答案不对:

应该是这样的:

Select * from EMPLOYEE where ASCII(lower(LAST_NAME)) = ASCII(upper(LAST_NAME))

请检查添加的ASCII关键字。 这将为您提供相当于LAST_NAME的ASCII。如果LAST_NAME只有数字,则大写和小写必须相同且ASCII等效。但是如果LAST_NAME具有字母,则大写和小写的ASCII等价物不相同。

谢谢和问候, Ashish Mayekar

答案 3 :(得分:0)

我认为他们将LAST_NAME字段仅包含数字的行视为具有疯狂值的行(因为通常姓氏不应只包含数字)。查询是快速识别这些行的技巧。

答案 4 :(得分:0)

您可以使用正则表达式检查列值是否与条件匹配。例如,检查this和SO上的类似问题。