postgresql之字符串类型/日期转化为jsonb类型

2019-08-21  本文已影响0人  hellodyp

原生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:valueedd_raw: data
jsonb_set的第三个参数是布尔值,含义是如果该字段内没有key, 则新增此key并插入要更新的值
注意->>这个操作符可以取出jsonb字段的指定key对应的value 当作正常字段那样使用

上一篇 下一篇

猜你喜欢

热点阅读