【问题标题】:Oracle SQl- How to Convert T00:00:00 into AM or PM readable time in Oracle SQLOracle SQl-如何在 Oracle SQL 中将 T00:00:00 转换为 AM 或 PM 可读时间
【发布时间】:2021-03-06 15:47:29
【问题描述】:
我尝试通过以下方式转换:
TO_TIMESTAMP ("T00:00:00", '"T"hh:mi:ss')
显示错误>>
ORA-01861: 文字与格式字符串不匹配
01861. 00000 - “文字与格式字符串不匹配”
*原因:输入中的文字必须与输入中的文字长度相同
格式字符串(前导空格除外)。如果
“FX”修饰符已打开,文字必须完全匹配,
没有额外的空格。
*操作:更正格式字符串以匹配文字。
【问题讨论】:
标签:
sql
string
oracle
datetime
time
【解决方案1】:
您的直接问题是 hh:这代表基于 12 小时的格式(上午/下午),因此它只允许 1 和 12 之间的值(0 在12 小时制)。
您也不应该在文字字符串周围使用双引号;但我认为您实际上并没有在代码中这样做,否则您会收到错误invalid identifier。
然后:无论如何,Oracle 中没有time 数据类型——只有date(很直观,它包括一个时间部分)和各种风格的timestamps。如果您希望将输入字符串转换为以 AM/PM 格式表示 time 的字符串,那么您可以执行以下操作:
to_char(to_date('T00:00:00', '"T"hh24:mi:ss'), 'hh12:mi:ss am')
这会将时间字符串转换为date(日期部分在未指定时默认为当前日期),然后以上午/下午格式返回其时间部分格式。这产生:
12:00:00 AM