我试图将varchar类型的现有列转换为jsonb。该列包含类似"黑白橙"等字符串。并希望将其转换为jsonb格式,以便将其转换为[" black"," white"," orange"]。
=MID(A1,6,FIND("-",A1,6)-FIND("-",A1,1)-1)
我希望将列类型转换为jsonb,而using:part也会将现有数据转换为jsonb。
相反,我得到了这个错误:
ActiveRecord :: StatementInvalid:PG :: InvalidTextRepresentation:ERROR:类型为json的输入语法无效 细节:Token" Indigo"是无效的。 背景:JSON数据,第1行:Indigo :ALTER TABLE"报价" ALTER COLUMN"颜色" TYPE jsonb使用颜色:: jsonb
我尝试过其他语法,但最终仍然遇到同样的错误。我想我必须通过类似to_json的东西转换整个列属性,但我不知道如何解决这个错误。经过多次谷歌搜索后,其他具有相同错误的人似乎找不到解决方案。
答案 0 :(得分:1)
您无法通过简单的强制转换从空格分隔的字符串到JSON。一种简单的方法是首先打破字符串以获得PostgreSQL数组(text[]
):
regexp_split_to_array(colors, E'\\s+')
然后将该数组转换为JSON:
to_json(regexp_split_to_array(colors, E'\\s+'))
你必须小心使用引号和反斜杠来通过Ruby获取那一点SQL并进入数据库,这样你就会说:
using: %q{to_json(regexp_split_to_array(colors, E'\\\\s+'))}
%q{...}
就像一个带引号的字符串,但是让你可以避免转义SQL字符串文字中的单引号,然后加倍反斜杠以防止它们被%q{...}
解释。 / p>