SQL需要在月份出生的名字最长的人

时间:2015-11-03 15:49:32

标签: sql

我有一个关于SQL的问题。我必须提出一个查询给我:

出生在这个名字最长的月份的人。 (所以,9月)

我正在使用apex.oracle.com,我必须使用我学校的数据库。

当我直接寻找9月份出生的人时,这并不好。我需要一个查询,其结果与我不知道9月是名字最长的月份时的结果相同。

我知道这是一个愚蠢的问题,但它适用于学校。

很抱歉,如果我的英语有时不好。我是荷兰人。

希望你能帮助我:)。

到目前为止,我有这个,但我不知道如何进一步......

SELECT voornaam, tussenvoegsels, achternaam
, nvl(to_char(geb_datum, 'month'), 'onbekend')
FROM studenten

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT voornaam, tussenvoegsels, achternaam, geb_datum FROM studenten WHERE to_char(geb_datum, 'month') = (SELECT to_char(geb_datum, 'month') FROM studenten WHERE LEN(to_char(geb_datum, 'month') = (SELECT MAX(len(to_char(geb_datum, 'month')) FROM MyTableName))

可能还有一些小错误,但我没有任何数据库来测试它。

小建议:在您的问题中翻译您的列名。不是每个人都像我一样是比利时人,因此理解列名。 ;)

答案 1 :(得分:0)

如上所述,问题确实要求您确定哪个月的名称最长。这可以通过多种方式完成,但它们都要求您能够获取MonthName列中值的长度,并且在不同的数据库产品中执行该操作的函数也是不同的。我猜你正在使用Oracle(来自NVL),Oracle使用LENGTH

Oracle还使用特定于产品的语法来获取“顶部”行。

因此,为了得到名字最长的月份,你会做这样的这一点(对于用英语工作道歉):

 SELECT MonthName FROM Months ORDER BY LENGTH(MonthName) DESC WHERE RowNum = 1

并且可以将其合并到一个大的SELECT语句中:

 SELECT Name FROM Students WHERE MonthName =
    (SELECT MonthName FROM Months ORDER BY LENGTH(MonthName) DESC WHERE RowNum = 1)

这假定

  • 你有一个单独的月表来检查。
  • MonthName是一个正确表达的Oracle函数,用于从出生日期中提取月份。

如果您没有月份表,则必须执行此操作:

 SELECT Name FROM Students WHERE MonthName =
    (SELECT MonthName FROM Students ORDER BY LENGTH(MonthName) DESC WHERE RowNum = 1)