【问题标题】:Extracting alpha and numeric parts from a column从列中提取字母和数字部分
【发布时间】:2014-01-20 20:02:40
【问题描述】:

我有一个表 tab1,其中有一列 col1 具有复合 alpha-then-numeric 值,如下所示:

abc123
xy45
def6
z9

我需要在查询中将值提取为单独的列,数字部分位于整数数据类型的列中。

如果这两个值的开始和结束位置一致,则可以使用substring() 完成这项工作,因为您可以看到数字部分的开始位置不同。

有没有一种优雅的方法来解决这个问题,或者必须使用正则表达式匹配来通过每个可能的起点的一系列联合来分隔案例,或者在一个巨大的案例语句中汇总?

【问题讨论】:

标签: mysql sql parsing alphanumeric


【解决方案1】:

是的,它是:

SELECT
  @col:=col1 AS col, 
  @num:=REVERSE(CAST(REVERSE(@col) AS UNSIGNED)) AS num,
  SUBSTRING_INDEX(@col, @num, 1) AS word
FROM
  tab1

- 仅当您的列包含字母和数字(如您所描述的)时才有效。这就是为什么需要双 REVERSE() 的原因(否则 CAST() 将无效)。检查这个demo

【讨论】:

  • +1ed 但只是注意到需要特别注意以0 结尾的字符串,可以将1 附加到每个值的末尾,然后在CAST 之后对其进行修剪。
  • 是的,这是一个有点“欺负”的解决方案——还需要关心数据类型的长度,因为字符串可以容纳任何东西,而整数/浮点数是有限的
猜你喜欢
  • 2019-09-06
  • 2016-04-20
  • 1970-01-01
  • 2017-07-30
  • 2018-01-01
  • 2021-12-10
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多