And*_*rew -2 sql oracle select date
我有一个ID_BB_SECURITY列,例如,日期值存储在此列中'20190801'。
我想从此字段中获取月份号,例如我想获得8月的日期。
我在下面的查询中尝试过,但抛出了“字面不匹配”错误:
select to_number(to_date(ID_BB_SECURITY),'mm') from BT_EXPORT
Run Code Online (Sandbox Code Playgroud)
我不确定是否必须忽略null值以避免错误
如果值是数字或字符串,则可以将其转换为带有适当掩码的日期-这是您所缺少的,也是导致您收到错误的原因(因为它使用的是会话NLS_DATE_FORMAT设置,这显然不匹配)数据的格式;但是无论如何您都不应该依赖它,如@MTO在评论中所说):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
Run Code Online (Sandbox Code Playgroud)
然后从中提取月份号:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Run Code Online (Sandbox Code Playgroud)
或者,您可以只使用一个子字符串:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Run Code Online (Sandbox Code Playgroud)
这些假设采用固定的一致格式,当使用错误的数据类型时,这总是有风险的假设。如果是数字,则表示它们正在从数字到字符串进行隐式转换,您可以将其转换为显式转换以更清楚。
如果已经是日期(当然应该是日期),那么您不需要转换:
select extract(month from ID_BB_SECURITY) from BT_EXPORT
Run Code Online (Sandbox Code Playgroud)
如果您有数字,则可以使用算术来提取月份:
select mod(floor(20190801 / 100), 100)
from dual;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |