原生sql使用 variable::type 这种方式很容易实现类型转化
但是转化为jsonb的时候,字符串类型转化为jsonb使用此种方式会报错
SELECT 'hello world'::jsonb
### ERROR: invalid input syntax for type json
# 以下才是正确姿势
SELECT '"hello world"'::jsonb
即 如果行把字符串类型转化为jsonb 需要在字符串外层包上双引号("")
那么查询到的变量如何使用双引号呢?
答案是使用format
方法,没错这个方法就类似与很多编程语言里面字符串格式化方法, 第一个参数是待格式化的字符串,第二个参数是要格式的字符串
应用场景:
笔者业务中某张表存了日期字段,想把该日期字段存到表内某jsonb字段下
update orders
set extend = jsonb_set(extend, '{edd_raw}',
format('"%s"', to_char(edd, 'YYYY-MM-DD HH24:MI:SS'))::jsonb,
true)
where extend->>'edd_raw' is null
本条sql还使用了jsonb_set函数, 用来更新某个jsonb字段中的某个key
化用到这条sql上, extend是jsonb字段, 该字段下有一个key:value
是edd_raw: data
jsonb_set的第三个参数是布尔值,含义是如果该字段内没有key, 则新增此key并插入要更新的值
注意->>
这个操作符可以取出jsonb字段的指定key对应的value 当作正常字段那样使用