sql - 我的列条目与多个“_”字符混合在一起,如何将第一个“_”之前的数字替换为函数,同时保留其余部分
问题描述
我的列条目中的字符与多个“_”(例如67_0000100-478_NA_d202xz97406_t17199m2156
)混合在一起。
使用 SQL(DB 是 Postgres),我只想'_'
用一个函数(例如它的正方形 + 本身)替换第一个之前的数字,同时以相同的方式保留剩余的字符。
当前条目:67_0000100-478_NA_d202xz97406_t17199m2156
期望的输出:4556_0000100-478_NA_d202xz97406_t17199m2156
根据我的研究和探索该平台上有用的密切相关的先前回答的问题,我认为大多数问题案例是在文本条目仅出现一次字符时替换/删除某些文本。
到目前为止我的进展(根据建议的评论更新),但是我收到语法错误(我不是 SQL 专家):
CREATE OR REPLACE VIEW public.v_events AS
SELECT uid, serial_id, session_id, start_time, code, event_name, end_timestamp, temp_code
FROM public.events_data
update public.v_events
set uid = concat(
(split_part(uid, '_', 1))::int^2 + (uid),
substr(uid, strpos(uid, '_')))
注意:uid 是要替换为函数的列条目(uid^2 + uid)。我知道可以在 SQL 中使用 Power() 来完成。
我需要做的是创建原始表(public.events_data)的视图(public.v_events),并仅用不同的函数(uid^2 + uid)替换第一个'_'(例如67)之前的数字。
我真的很感谢任何人的帮助?
解决方案
可以获得第一个元素的平方,例如使用split_part()
它可以与字符串的其余部分连接:
update the_table
set the_column = concat(
(split_part(the_column, '_', 1))::int^2,
substr(the_column, strpos(the_column, '_'))
)
(split_part(the_column, '_', 1))::int
_
以整数形式返回第一个字符串之前的字符串。如果无法将值转换为 int,则会导致错误。
如果您不想更改表,请在 SELECT 语句中使用该表达式:
SELECT concat((split_part(uid, '_', 1))::int^2 + (uid),
substr(uid, strpos(uid, '_'))) as uid,
serial_id,
session_id, start_time, code, event_name, end_timestamp, temp_code
FROM public.events_data
推荐阅读
- python - selenium 与 unittest 在同一窗口中
- python-3.x - _tkinter.TclError:未找到第 1 项
- reactjs - React 在回调中获取值
- reactjs - 在 React 中设计一个可重用的 List-Detail 视图
- java - Quarkus REST 客户端避免空字段的 JSON 序列化
- css - 在没有javascript的情况下使用第n个孩子时有没有办法访问n?
- r - officedown 不产生输出:错误:read_docx 仅支持 docx 文件
- javascript - Web Speech API text-to-speech : 如何让一个 JavaScript 代码适用于要阅读的多个文本?
- python - torch.random() TypeError:“模块”对象不可调用
- javascript - 向javascript数组添加键