【问题标题】:Oracle Select to Make MonthOracle 选择制作月份
【发布时间】:2020-09-30 09:50:53
【问题描述】:

我有以下选择来获取包含时间戳的文件名并将其转换为日期/时间字段的正确格式,但是当我使用 TO_CHAR(TO_DATE... 它会导致我的第一个和第三个子字符串重复. 当我不使用 TO_CHAR(TO_DATE... 它不重复???

    SELECT 
SUBSTR(COMPARE_FILENAME, INSTR(FILENAME, 'e', 1) + 7, 2) ||'-'||
TO_CHAR(TO_DATE(SUBSTR(FILENAME, INSTR(FILENAME, 'e', 1) + 5, 2), 'MM')) ||'-'||
SUBSTR(FILENAME, INSTR(FILENAME, 'e', 1) + 1, 2) ||' '||
SUBSTR(FILENAME, INSTR(FILENAME, 'e', 1) + 9, 2) ||'.'||
SUBSTR(FILENAME, INSTR(FILENAME, 'e', 1) + 11, 2) ||'.'||
SUBSTR(FILENAME, INSTR(FILENAME, 'e', 1) + 13, 2) AS TIME
FROM TABLE1 WHERE ID = 1662;

我从中选择的列有:Name20200601225511.txt

它返回:01-01-JUN-20-20 22.55.11

【问题讨论】:

    标签: string oracle date select


    【解决方案1】:

    获取包含时间戳的文件名并将其转换为日期/时间字段的正确格式

    不需要这种复杂的字符串解析逻辑。您可以使用双引号定义包含文字部分的格式说明符。

    这会将您的字符串正确解析为dates:

    to_date(filename, '"Name"YYYYMMDDHH24MISS".txt"') 
    

    Demo on DB Fiddle

    alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
    select to_date('Name20200601225511.txt', '"Name"YYYYMMDDHH24MISS".txt"') filedate from dual
    
    |文件日期 | | :----------------- | | 2020-06-01 22:55:11 |

    【讨论】:

    • 谢谢!这正是我想要的!
    • 如果它对您有用,那么您必须接受答案,以便您的问题被标记为已解决。
    猜你喜欢
    • 2021-10-11
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多