Oracle-如何从LTRIM结果中进行选择

时间:2018-12-03 15:43:33

标签: sql oracle

我有一个表,其中的列x具有varchar值,例如'student_number = 1234'和'student_ticket_number = 4321'

我使用LTRIM仅获取号码,因为我需要他们获取学生注册号

我的查询类似于:

select LTRIM(tb.col_x, 'student_number'),
       LTRIM(tb.col_x, 'student_ticket_number')
from table tb
where tb.condition = c

它有效,但是现在我需要创建ltrim的numbers列,然后将其用于与表owner.students的联接中以获取其注册号码

就像JNevill所说的那样尝试过,在join子句中使用ltrim,但出现“无效数字”错误,原因是在此表中该列为varchar,但在学生表中此键为数字

2 个答案:

答案 0 :(得分:2)

我会使用cat > 'query.yml' <<'__END__' queries: - "SELECT 1" - "SELECT 2" __END__ ansible -m postgresql_query -sU postgres -a @queries.yml

like

答案 1 :(得分:1)

别忘了您可以沿相反的方向前进,并且可以将文本从col_x中剥离出来而只留下一个数字,可以在该数字中添加文本(在另一个表中)。我怀疑这也会有更好的表现:

SELECT * 
FROM
  table tb
  INNER JOIN
  students s
  ON
    tb.col_x = 'student_number=' || s.registration_number

您可以使用OR建立多个链接:

SELECT * 
FROM
  table tb
  INNER JOIN
  students s
  ON
    tb.col_x = 'student_number=' || s.registration_number OR
    tb.col_x = 'student_ticket_number=' || s.ticket_number

如果col_x中存在的数字代表不同的事物(例如,它并不总是学生注册号),则此方法可以很好地工作。也许在考虑将其构建到生产系统中之前,您应该一次性将其用作清理数据库并在tb表中有一个学生ID,而不要总是将其移入/移出数据库。字符串

编辑:您提到您的电话号码在不同的表格中。可能需要多个联接,或者多个查询:

SELECT * 
FROM
  table tb
  INNER JOIN
  students s
  ON
    tb.col_x = 'student_number=' || s.registration_number
  INNER JOIN
  student_tickets st
  ON
    tb.col_x = 'student_ticket_number=' || st.ticket_number

或者,如果这里没有直接关系并且您没有任何结果,则必须进行单独的查询:

SELECT * 
FROM
  table tb
  INNER JOIN
  student_tickets st
  ON
    tb.col_x = 'student_ticket_number=' || st.ticket_number

旁注:

LTRIM不适用于从字符串的左侧删除字符串。碰巧它确实可以工作,但是如果您考虑它的工作方式,您会意识到这是一个糟糕的解决方案。 SUBSTRING会更快