Oracle日期格式转换问题:ISO转美国格式并去除时分秒
解决ISO日期转美国纯日期格式的问题
嘿,我来帮你搞定这个日期格式的问题!你现在遇到的情况是:虽然用Trunc(cast(to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"')as date))把时间截断到了午夜,但输出还是带着12:00:00 AM,这是因为你最终得到的是date类型,数据库会用默认的日期时间格式来显示它——而date类型本身是包含时间信息的(哪怕是午夜)。
要得到纯4/11/2018这样的美国格式日期,你需要直接把ISO字符串转换成格式化后的字符串,而不是date类型。用TO_CHAR函数就能实现这个需求:
TO_CHAR(to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'), 'M/D/YYYY')
语句解释:
to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'):先把你的ISO格式字符串转换成数据库能识别的timestamp类型。TO_CHAR(..., 'M/D/YYYY'):将timestamp格式化为美国风格的日期字符串——M表示一位或两位的月份(比如4而不是04),D表示一位或两位的日期,YYYY是四位年份,这样就完全去掉了时间部分。
如果你希望月份和日期固定显示两位(比如04/11/2018),只需要把格式字符串改成'MM/DD/YYYY'就行:
TO_CHAR(to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'), 'MM/DD/YYYY')
这样执行后,输出就会是你期望的纯日期格式啦!
内容的提问来源于stack exchange,提问作者Gaurav Kanodia
相关产品推荐
相关产品推荐

