【发布时间】:2017-10-02 20:17:28
【问题描述】:
我有一对多的组织:用户关系。 我想获取 Organization 的所有 User 模型的用户名,捕获该用户名的一部分并用新值附加/替换它。
这是我的做法:
- 形成原始 SQL 以获取匹配的用户名并将其替换为新值。
raw = "SELECT REGEXP_REPLACE($1::string[], '(^[a-z0-9]+)((\s[a-z0-9]+))*\@([a-z0-9]+)$', m.name[1] || '@' || $2) FROM (SELECT REGEXP_MATCHES($1::string[], '(^[a-z0-9]+)((\s[a-z0-9]+))*\@([a-z0-9]+)$') AS name) m"
- 获取匹配的用户名并将其替换为新值。 用户名:从可查询中检索到的用户名列表
Repo.query(raw, [usernames, a_string])
-
我遇到的错误
SELECT REGEXP_REPLACE($1::string[], '(^[a-z0-9]+)(( [a-z0-9]+))@([a-z0-9]+ )$', m.name[1] || '@' || $2) FROM (SELECT REGEXP_MATCHES($1::string[], '(^[a-z0-9]+)(( [a-z0- 9]+))@([a-z0-9]+)$') AS 名称) m [["tradeboox@trdbx18"], "trdbx17"] {:错误, %Postgrex.Error{connection_id: 7222, message: nil, postgres:%{code::undefined_object,文件:“parse_type.c”,行:“257”, 消息:“类型\”字符串[]\“不存在”,pg_code:“42704”, 位置:“137”,例程:“typenameType”,严重性:“ERROR”, 未知:“错误”}}}
仅供参考:User 模型的 username 字段类型为 citext
- 获得替换值后,我想使用类似 的内容更新 User
update([u], set: [username: new_values])
关于如何进行此操作的任何想法?
`
【问题讨论】:
-
投票结束时,请发表评论,以便读者清楚了解哪些内容。请参阅已接受的答案以进行澄清。
标签: sql postgresql elixir ecto