【问题标题】:mySQL sorting issue with alphanumeric string带有字母数字字符串的mySQL排序问题
【发布时间】:2011-07-13 00:32:58
【问题描述】:

我有一个购买的数据库,其中包含非零填充字母数字高尔夫球场“数字”,例如 ZZ-1、ZZ-2、ZZ-9、ZZ-10...

我需要编写一个查询,该查询将提取 MAX 数值,并且在字符串上使用 MAX 时不会 DWIM 并将 ZZ-9 排序为 MAX 而不是 ZZ-10。

SELECT MAX( CourseNumber ) AS x
FROM courses
WHERE CourseNumber
RLIKE 'ZZ'

只选择数字时同样的问题:

SELECT MAX(SUBSTR(CourseNumber, 4)) AS x 
FROM courses WHERE CourseNumber RLIKE 'ZZ'

谁有一个聪明的方法来做到这一点?我认为它必须涉及 SUBSTR,但我想不出如何让它发挥作用。

【问题讨论】:

  • 字母前缀是固定长度的,还是有“PDQ”和“ABCDFEGFGHIJLFERWEFDSFDS”前缀?无论哪种方式,如果您对这些子字段进行大量搜索/匹配,您可能需要花时间将这些位预先拆分为单独的字段,以便您可以对这些派生字段进行直接匹配,否则您的where 子句将变成一团糟的子字符串/强制转换子句。
  • 目前都是2个字母,连字符,数字。我的老板从那里购买这些数据的人都是白痴,所以它可能不会永远保持这种状态,但假设该模式适合我的解决方案!

标签: mysql sql string sorting


【解决方案1】:
SELECT MAX(
  CAST(
    SUBSTRING(CourseNumber, 4) AS UNSIGNED)
  ) 
FROM courses WHERE CourseNumber RLIKE 'ZZ'

【讨论】:

    【解决方案2】:

    也许 to_number(SUBSTR(coursenumber,3))

    【讨论】:

    • mySQL 没有 to_number;我相信这是 Oracle 的功能。
    • @jerry - 是的,我是一个 Oracle 人 :)
    • 可能类似于 SELECT CAST(SUBSTR(CourseNumber), 3) AS UNSIGNED) FROM courses WHERE CourseNumber RLIKE 'ZZ'
    • Randy - 谷歌搜索 to_number() 让我走上了正确的道路!谢谢! forums.mysql.com/read.php?10,152446,233605#msg-233605
    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多