关于Postgresql数据库查询结果不足位数前面补位的操作

Posted JAVA分享圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Postgresql数据库查询结果不足位数前面补位的操作相关的知识,希望对你有一定的参考价值。

问题描述:数据库在建表时将日期和时间分为两个字段,而且存储类型为numeric,所以数据库存储的时间为l_date:20180512,l_input_time:120804。如下图:


    但系统需求一般都会要求按时间查询,比如查询2018-05-21 08:05:10到2018-05-25 08:05:10之间的数据,这就给我们查询带来了麻烦,尽管这不是个复杂的问题。

    首先想到的就是把两个字段合并变成一个字段来做条件查询,这时我们会发现一个问题,如上面图中所示,当时间小于12点时时间只存了五位数字,这时候之间拼接会变成20180522 82538,这样明显不对。

    这时我们自然会想到先让时间补位再拼接,代码如下:

 

下面我面简单介绍一下Postgresql中有一些函数;

函数 说明 实例 结果
length(String) 计算字符串长度 length('1234') 4
length(String bytea, encoding name ) 计算字符串长度,指定字符串使用的编码 length('1234', 'UTF8') 4
CAST(name AS type) 将指定字段转换成指定类型 CAST(1234 as VARCHAR) '1234'
lpad(String text,length int [,fill text])  通过填充字符填充(默认情况下的空间)将字符串填充到长度长度。如果不足某一长度,则在左边自动补上指定的字符串,直至达到指定长度,可同时指定多个自动填充的字符。如果字符串已经长于长度,那么它被截断(在右边)。 lpad('82538', 6, '0') 082538
String || String or String || non-String  or non-String  || String 连接操作 'Post' || 'greSQL' PostgreSQL
bit_length(String) 计算字符串的位数 bit_length('1234') 32
char_length(String) or character_length(String) 计算字符串中字符个数 char_length('1234') 4
lower(String) 转换字符串为小写 lower('AsAA') asaa
octet_length(String) 计算字符串的字节数 octet_length('AsAA') 4
overlay(string placing string from int [for int]) 替换字符串中任意长度的子字串为新字符串 overlay('asfdasf' placing 'hom' from 2 for 4) ahomsf
position(substring in string) 子串在一字符串中的位置 position('z' in 'zhuzi') 1
substring(string [from int] [for int]) 截取任意长度的子字符串 substring('zhuzi' from 2 for 3) huz
substring(string from pattern) 利用正则表达式对一字符串进行任意长度的字串的截取 substring('zhuzi' from '...$') uzi
substring(string from pattern for escape) 利于正则表达式对某类字符进行删除,以得到子字符串 substring('zhuzi' from '%#"h_z#"_' for '#') huz
trim([leading | trailing | both] [characters] from string) 去除尽可能长开始,结束或者两边的某类字符,默认为去除空白字符,当然可以自己指定,可同时指定多个要删除的字符串 trim(leading  'z' from 'zhuzi') huzi
upper(string) 将字符串转换为大写 upper('zhuzi') ZHUZI
ascii(string) 得到某一个字符的Assii值 ascii('z') 122
btrim(string text [, characters text]) 去除字符串两边的所有指定的字符,可同时指定多个字符 btrim('xyxtrimyyx', 'xy') trim
chr(int) 得到某ACSII值对应的字符 chr(65) A
convert(string bytea, src_encoding name, dest_encoding name)

转换字符串编码,指定源编码与目标编码
convert('text_in_utf8', 'UTF8', 'LATIN1') text_in_utf8 represented in ISO 8859-1 encoding
convert_from(string bytea, src_encoding name) 转换字符串编码,自己要指定源编码,目标编码默认为数据库指定编码 convert_from('text_in_utf8', 'UTF8') text_in_utf8 represented in the current database encoding
convert_to(string text, dest_encoding name)  转换字符串编码,源编码默认为数据库指定编码,自己要指定目标编码 convert_to('some text', 'UTF8') some text represented in the UTF8 encoding
decode(string text, type text)  对字符串按指定的类型进行解码 decode('MTIzAAE=', 'base64') MTIzAAE=
encode(data bytea, type text) 与decode相反,对字符串按指定类型进行编码 encode(E'123\\000\\001', 'base64') MTIzAAE=
initcap(string) 将字符串所有的单词进行格式化,首字母大写,其它为小写 initcap('hi zhuzi') Hi Zhuzi
ltrim(string text [, characters text])  删除字符串左边某一些的字符,可以时指定多个要删除的字符 ltrim('zhuzi','zh') uzi
md5(string) 将字符串进行md5编码 md5('abc') d7f766a01ea37116b51595d20d76f3df
pg_client_encoding() 得到pg客户端编码 pg_client_encoding() UTF8
quote_ident(string text) 对某一字符串加上两引号 quote_ident('Foo bar') "Foo bar"
quote_literal(text) 对字符串里两边加上单引号 quote_literal(11) '11'
regexp_matches(string text, pattern text [, flags text]) 对字符串按正则表达式进行匹配,如果存在则会在结果数组中表示出来 regexp_matches('foobarbequebaz', '(bar)(beque)') {bar,beque}
regexp_replace(string text, pattern text, replacement text [, flags text]) 利用正则表达式对字符串进行替换 regexp_replace('Thomas', '.[mN]a.', 'M') ThM
regexp_split_to_array(string text, pattern text [, flags text ]) 利用正则表达式将字符串分割成数组 regexp_split_to_array('hello world', E'\\s+') {hello,world}
regexp_split_to_table(string text, pattern text [, flags text]) 利用正则表达式将字符串分割成表格 regexp_split_to_table('hello world', E'\\s+')
hello
world

repeat(string text, number int) 重复字符串一指定次数 repeat('Pg', 4) PgPgPgPg
replace(string text, from text, to text) 将字符的某一子串替换成另一子串 replace('abcdefabcdef', 'cd', 'XX') abXXefabXXef
rpad(string text, length int [, fill text])  去除字符串右边指定的字符 rtrim('trimxxxx', 'x') trim
split_part(string text, delimiter text, field int) 对字符串按指定子串进行分割,并返回指定的数值位置的值 split_part('abc~@~def~@~ghi', '~@~', 2) def
strpos(string, substring) 指定字符串在目标字符串的位置 strpos('high', 'ig') 2
substr(string, from [, count]) 截取子串 substr('alphabet', 3, 2) ph
to_hex(number int or bigint) 对数值进行十六进制编码 to_hex(1234) 4d2
translate(string text, from text, to text) 将字符串中某些匹配的字符替换成指定字符串,目标字符与源字符都可以同时指定多个 translate('12345', '14', 'ax') a23x5

以上是关于关于Postgresql数据库查询结果不足位数前面补位的操作的主要内容,如果未能解决你的问题,请参考以下文章

按百分位数将类似 sql 的查询的结果分组:在 Redshift / postgresql

在SQL数据库中怎样让编号从6位数开始,而且不足6位就在前面补0

关于PostgreSQL的大小写问题和验证

关于PostgreSQL的大小写问题和验证

sql中如何在插入数时不足位数前加0

access数据库编号转换成统一3位数长度方法,不足3位前面补零