【问题标题】:Splitting a full name including title into separate fields将包括标题在内的全名拆分为单独的字段
【发布时间】:2019-03-08 14:15:15
【问题描述】:

我试图在一个看似古老的 DB2 版本中将全名字段拆分为单独的字段,因此我不能使用像 reverse 这样的新功能。

例子

FULL_NAME

埃尔顿·约翰先生

基努·里维斯先生

我想回来

标题在后

埃尔顿·约翰先生

基努·里维斯先生

我很沮丧,我已经设法用

获得姓氏
RIGHT(NAME, LENGTH(NAME) - LOCATE( ' ',NAME, LOCATE(' ', NAME)+1)) AS last_name

但 DB2 并不是我真正喜欢的,因此非常感谢任何帮助!

谢谢!

【问题讨论】:

  • 你怎么知道所有的名字都有三个组成部分?
  • 正如@GordonLinoff 暗示的那样......如果您想要干净的数据,您需要处理所有情况。这意味着如果你有一个 Mr. Hunter S. ThompsonSir Kermit the Frog 在那里,你需要处理它。有很多潜在的例外情况。
  • 我认为奇怪记录可能会丢失名字,但我会在导入时使用 ifnull 来处理。谢谢!

标签: sql string split db2


【解决方案1】:

DB2 支持regexp_substr(),所以你应该可以这样做:

select regexp_substr(name, '[^ ]+', 1, 1) as title,
       regexp_substr(name, '[^ ]+', 1, 2) as firstname,
       regexp_substr(name, '[^ ]+', 1, 3) as lastname

但是如果你没有reverse(),你可能也没有这个功能。

【讨论】:

  • 回答得非常迅速,效果也很好。非常感谢!
猜你喜欢
  • 2015-11-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多