我们有时候会有这么一个需求,把多个字符串存到一个数据库字段中,并且以,的方法隔开
当我们连接数据库取这个字段出来做处理可以有两种方式:
// An highlighted block
public static void main(String[] args) {// TODO Auto-generated method stubString str = "0,12,3";String arr[] = str.split("//,"); //以,为分割点依次向不同的数组下标里存放数据,逗号不会被存到数组里,0存到arr[0],12存到arr[1],3存到arr[2]String arr[] = str.split("");//将字符串中所有字符都存到数组里,0,12,3代表一个元素,存到arr[0]中System.out.println(Arrays.toString(arr)); //[0, 12, 3]注意这里输出的是元素在数组中的存储结果,逗号代表分割,不是元素}
}
select code from ods.my_table t where id=374;当我查询出来的结构集为: 1,2,3//但是我有需要把他们拆分成一个数组进行处理,可以通过 string_to_array函数
select string_to_array(code,’,’) from ods.my_table t where id=374;结果集为:{1,2,3}
第一个参数为需要转换的字符串
第二个参数为字符串中每个数组的值的分隔符
要检查一个数组中是否至少存在一个满足条件的值,请按下面的语法使用 ANY 运算符:
comparison_operator ANY (array)
value = ANY (array): 只要数组中有一个等于 value 的值,该表达式返回 true, 否则返回 false。
value > ANY (array): 只要数组中有一个小于 value 的值,该表达式返回 true, 否则返回 false。
value < ANY (array): 只要数组中有一个大于 value 的值,该表达式返回 true, 否则返回 false。
value <> ANY (array): 只要数组中有一个不等于 value 的值,该表达式返回 true, 否则返回 false。
实例:
要检查数组 [1, 2, 3] 是否包含一个值为 2 的元素,请使用以下语句:
SELECT 2 = ANY(ARRAY[1, 2, 3]);结果集为:
?column?
----------
t
要检查数组 [1, 2, 3] 是否包含一个值大于 3 的元素,请使用以下语句:
SELECT 3 < ANY(ARRAY[1, 2, 3]);结果集为:
?column?
----------
f
当我们有这样的需求: 查看一个字段中包含的某个字符串,如果包含的就返回改对应 id数据;
当然,我们可以使用like,但是那太影响性能了;这时候如果改字段是上面说的1,2,3的通过,号拼接的字段属性,我们就可以使用string_to_array
//查询t_road_workorder_info表,先把改字段转成一个数组,然后使用ANY运算符
//只要改字段包含一个1,就返回true,当where条件为true的时候,该id字段就会查询出来了;
SELECT id FROM t_road_workorder_info WHERE '1' = any(string_to_array(code,','));
PostgreSQL ANY 运算符用于将一个值与一个值列表进行比较,只要值列表中有一个值满足指定的条件就返回真,否则返回假。 ANY 运算符可用于 WHERE 子句中过滤指定条件行。
上一篇:Linux环境搭建