使用mysql订购一个列名
我刚刚进入了一个名为CodeFights的网站,它给开发者带来了挑战。我想请stack overflow的可爱的朋友们,也许可以通过MySql挑战引导我朝着正确的方向前进。。 首先,它给出了一个描述,如果这对你有用的话,也许你可以帮我解决这个问题,因为打字会花太长时间 如果不是,我对50%的问题的回答是: 从书本章节中选择章节名称 它还要求你按升序排列章节名称,我已经试过了 按章节号ASC从图书章节顺序中选择章节名称; 但是运气不好, 他们只想从书的章节和章节名称中选一列使用mysql订购一个列名,mysql,Mysql,我刚刚进入了一个名为CodeFights的网站,它给开发者带来了挑战。我想请stack overflow的可爱的朋友们,也许可以通过MySql挑战引导我朝着正确的方向前进。。 首先,它给出了一个描述,如果这对你有用的话,也许你可以帮我解决这个问题,因为打字会花太长时间 如果不是,我对50%的问题的回答是: 从书本章节中选择章节名称 它还要求你按升序排列章节名称,我已经试过了 按章节号ASC从图书章节顺序中选择章节名称; 但是运气不好, 他们只想从书的章节和章节名称中选一列 有点难堪 一种方法是将
有点难堪 一种方法是将罗马数字转换为阿拉伯语(以10为基数)表示 但这并不是真的必要 一系列简单的字符串替换就可以了 就罗马数字“数字”的排名而言 如果我们用四个重复字符的表示替换这些情况。。。i、 e.
IV
->iii
,IX
->VIIII
,等等。然后获得可以排序的字符串值
因此,我们可以使用类似以下内容的ORDER BY子句:
ORDER BY REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
UPPER( chapter_num )
,'C','Z')
,'L','Y')
,'IV','IIII')
,'IX','VIIII')
,'XY','XXXX')
,'XZ','YXXXX')
这适用于最大为399的罗马数字值。那就是我们遇到“D”的时候
要处理400或更大的数字,我们可以在排序序列中将'D'
替换为字符“大于”'Z'
,例如左方括号'['
。我们可以将'M'
替换为右方括号']
。并对特殊情况下的'CD'
和'CM'
进行适当的更换
我们需要验证字符串的排序顺序是否正确:
'I' < 'V' < 'X' < 'Y' < 'Z' < '[' < ']'
IV
IX
XL
XC
ORDER BY REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
UPPER( chapter_num )
,'C','Z')
,'L','Y')
,'IV','IIII')
,'IX','VIIII')
,'XY','XXXX')
,'XZ','YXXXX')
'I' < 'V' < 'X' < 'Y' < 'Z' < '[' < ']'
ORDER BY REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
UPPER( chapter_num )
,'M',']')
,'D','[')
,'C','Z')
,'L','Y')
,'IV','IIII')
,'IX','VIIII')
,'XY','XXXX')
,'XZ','YXXXX')
,'Z[','ZZZZ')
,'Z]','[ZZZZ')