我在这里遇到了一个建议(SQL: ORDER BY using a substring within a specific column... possible?),它显示了一个CASE语句,它在一个包含4列的表中返回ORDER子句中的整数。
SELECT npID, title, URL, issue
FROM tbl
ORDER BY substring(issue, 1, 4) DESC
,CASE
WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter') THEN 1
WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter') THEN 3
WHEN substring(issue, 6, 100) IN ('Fall', 'Fourth Quarter') THEN 4
ELSE 5
END;我不明白这是如何运作的。显然,从大小写中得到的整数不是列序数(例如,其他5,因为表只有4列)。但是他们的意思是什么呢?(然而,文章中给出的例子很管用,所以我真的很困惑。)有人能解释一下在ORDER子句中在CASE语句中返回整数意味着什么吗?谢谢。
发布于 2017-02-01 16:09:55
ORDER BY子句中唯一一项被认为是序数的情况是,当它是整数字面时,看看SQL92标准,我们可以看到它的起源:
如果a包含a,则该值应大于0而不大于T的度数。
如果ORDER BY子句包含一个非常量标量表达式(如CASE ),则该表达式的结果被用作排序键,也就是说,如果它计算结果集中的一行并返回整数n,则它是排序的n的值。
发布于 2017-01-31 18:05:08
这些整数不是列序数,而是值文本。该查询首先按照issue列的前四个字符(代表年份)进行排序。然后,根据case表达式表示的第二个键对它们进行排序。在那里使用的值本身并不有趣,只有它们之间的相对顺序是重要的。例如,计算夏季问题的2没有任何意义--只有在冬天之后(计算为1)和春天之前(计算为3)。查询可以使用'a‘、'b’、'c‘、'd’和'e‘,并得到完全相同的结果。
发布于 2017-01-31 17:59:47
CASE语句中的整数值不是列序数,而是将用于排序结果的静态整数值。
在通过substring(issue, 1, 4) DESC订购记录之后,
当substring(issue, 6, 100)为'Winter'或'First_Quarter'时,首先对其进行排序,
当substring(issue, 6, 100)是'Summer'或'Second_Quarter'时,它将按'Winter'或'First_Quarter'排序。
以此类推。
为了更好地理解,您可以选择案例并查看结果。
SELECT npID, title, URL, issue,CASE
WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter') THEN 1
WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter') THEN 3
WHEN substring(issue, 6, 100) IN ('Fall', 'Fourth Quarter') THEN 4
ELSE 5
END
FROM tbl
ORDER BY substring(issue, 1, 4) DESC
,CASE
WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter') THEN 1
WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter') THEN 3
WHEN substring(issue, 6, 100) IN ('Fall', 'Fourth Quarter') THEN 4
ELSE 5
END;https://stackoverflow.com/questions/41964316
复制相似问题