尝试了以下两种方式,将pg中的timestamp格式转换成date格式:
方式一:
selectto_date(to_char(f.begin_time,'yyyy-mm-dd'),'yyyy-mm-dd')fromhafdf
方式二:
selectf.begin_time::DATEfromhafdf
大概比较了一下,9万条测试数据,方式二的性能更好!
补充:PostgreSQL中的时间戳格式转化常识
前提:当数据库中保存的是timestamp类型时,我们需要通过这个时间戳来做乐观数据锁,那么久需要Select出来,然后在更新的时候在Update的where条件中判断时间戳是否与查询时相同。
下面的SQL文查询结果是"2018-08-2010:09:10.815125",并且返回类型可以当String处理。返回json等都方便使用。
SQL>selectto_char(updateTime,'yyyy-mm-ddhh24:mi:ss.us')fromtbl_A;
更新时,参数传入“2018-08-2010:09:10.815125”的字符串,那么需要在SQL中转化来匹配updateTime字段的timeStamp数据类型。
SQL>updatetbl_Asetusername='XXX'whereuserid='001'andupdateTime=to_timestamp('2018-08-2010:09:10.815125','yyyy-mm-ddhh24:mi:ss.us');
另附表一张
函数 |
返回类型 |
描述 |
例子 |
to_char(timestamp,text) |
text |
把时间戳转换成字串 |
to_char(current_timestamp,'HH12:MI:SS') |
to_char(interval,text) |
text |
把时间间隔转为字串 |
to_char(interval'15h2m12s','HH24:MI:SS') |
to_char(int,text) |
text |
把整数转换成字串 |
to_char(125,'999') |
to_char(doubleprecision,text) |
text |
把实数/双精度数转换成字串 |
to_char(125.8::real,'999D9') |
to_char(numeric,text) |
text |
把numeric转换成字串 |
to_char(-125.8,'999D99S') |
to_date(text,text) |
date |
把字串转换成日期 |
to_date('05Dec2000','DDMonYYYY') |
to_timestamp(text,text) |
timestamp |
把字串转换成时间戳 |
to_timestamp('05Dec2000','DDMonYYYY') |
to_timestamp(double) |
timestamp |
把UNIX纪元转换成时间戳 |
to_timestamp(200120400) |
to_number(text,text) |
numeric |
把字串转换成numeric |
to_number('12,454.8-','99G999D9S') |
模式 |
描述 |
HH |
一天的小时数(01-12) |
HH12 |
一天的小时数(01-12) |
HH24 |
一天的小时数(00-23) |
MI |
分钟(00-59) |
SS |
秒(00-59) |
MS |
毫秒(000-999) |
US |
微秒(000000-999999) |
AM |
正午标识(大写) |
Y,YYY |
带逗号的年(4和更多位) |
YYYY |
年(4和更多位) |
YYY |
年的后三位 |
YY |
年的后两位 |
Y |
年的最后一位 |
MONTH |
全长大写月份名(空白填充为9字符) |
Month |
全长混合大小写月份名(空白填充为9字符) |
month |
全长小写月份名(空白填充为9字符) |
MON |
大写缩写月份名(3字符) |
Mon |
缩写混合大小写月份名(3字符) |
mon |
小写缩写月份名(3字符) |
MM |
月份号(01-12) |
DAY |
全长大写日期名(空白填充为9字符) |
Day |
全长混合大小写日期名(空白填充为9字符) |
day |
全长小写日期名(空白填充为9字符) |
DY |
缩写大写日期名(3字符) |
Dy |
缩写混合大小写日期名(3字符) |
dy |
缩写小写日期名(3字符) |
DDD |
一年里的日子(001-366) |
DD |
一个月里的日子(01-31) |
D |
一周里的日子(1-7;周日是1) |
W |
一个月里的周数(1-5)(第一周从该月第一天开始) |
WW |
一年里的周数(1-53)(第一周从该年的第一天开始) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。