我有一个表,其中的列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,但在学生表中此键为数字
答案 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会更快