问题描述:数据库在建表时将日期和时间分为两个字段,而且存储类型为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('1 |