我有一个关于SQL的问题。我必须提出一个查询给我:
出生在这个名字最长的月份的人。 (所以,9月)
我正在使用apex.oracle.com,我必须使用我学校的数据库。
当我直接寻找9月份出生的人时,这并不好。我需要一个查询,其结果与我不知道9月是名字最长的月份时的结果相同。
我知道这是一个愚蠢的问题,但它适用于学校。
很抱歉,如果我的英语有时不好。我是荷兰人。
希望你能帮助我:)。
到目前为止,我有这个,但我不知道如何进一步......
SELECT voornaam, tussenvoegsels, achternaam
, nvl(to_char(geb_datum, 'month'), 'onbekend')
FROM studenten
答案 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)
这假定
如果您没有月份表,则必须执行此操作:
SELECT Name FROM Students WHERE MonthName =
(SELECT MonthName FROM Students ORDER BY LENGTH(MonthName) DESC WHERE RowNum = 1)