需要在日期之间为以下子字符串编写查询
Need to write a query for the below sub string between the dates
ROW_ID STATUS CREATED_DATE
123 PROCESSED 06/01/16 03:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
123 PROCESSED 06/02/16 11:17:59 AM - 1-XHV8EV
123 PROCESSED 06/02/16 11:17:59 AM - 1-XHV8EV
我想检索从 06/01/16 03:1:59 AM 到 06/02/16 11:17:59 AM
之间的所有记录
输出应该是这样的
输出:
ROW_ID STATUS CREATED_DATE
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
我想检索从 06/01/16 03:1:59 AM 到 123 PROCESSED 06/02/16 11:17:59 AM
之间的所有记录
“-1-XHV8EV”是数据的一部分吗?如果是这样,你将不得不做一些花哨的 SQL 语句来去除它。
它会像
CAST (LEFT(CREATED_DATE,20) as DATE)
这应该会给你一个 CASTed 日期来处理。然后你可以 运行 在
之间
WHERE CAST (LEFT(CREATED_DATE,20) as DATE) between someDate and someOtherDate
Oracle 设置:
CREATE TABLE table_name ( ROW_ID, STATUS, CREATED_DATE ) AS
SELECT 123, 'PROCESSED', '06/01/16 03:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/01/16 03:18:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/02/16 10:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/02/16 10:18:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'PROCESSED', '06/02/16 11:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'PROCESSED', '06/02/16 11:17:59 AM - 1-XHV8EV' FROM DUAL;
查询:
SELECT *
FROM table_name
WHERE TO_DATE( SUBSTR( created_date, 1, 20 ), 'MM/DD/YY HH12:MI:SS AM' )
BETWEEN TIMESTAMP '2016-06-01 03:18:59'
AND TIMESTAMP '2016-06-02 11:17:00';
输出:
ROW_ID STATUS CREATED_DATE
---------- ---------- -------------------------------
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
- 在 created_date 列上应用任何函数将停止在您的 SQL 中使用该列上的任何索引。请检查是否可以将基于函数的索引应用于 created_date 列。
- 另外,请确保您始终以准确的格式填充日期字符串,以便从 created_date 中提取日期。该格式的任何更改都会导致应用程序出错。即使您在代码级别修复此类问题,基于函数的索引也会变得多余。
总而言之,这些修复是临时的。此问题的永久修复仅适用于 table 设计。如果这是一项重大工作,请尝试制定一个计划,将其分解为多个较小的任务,并逐步更改逻辑上依赖的对象,最终一劳永逸地解决这个问题。
祝你好运。
ROW_ID STATUS CREATED_DATE
123 PROCESSED 06/01/16 03:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
123 PROCESSED 06/02/16 11:17:59 AM - 1-XHV8EV
123 PROCESSED 06/02/16 11:17:59 AM - 1-XHV8EV
我想检索从 06/01/16 03:1:59 AM 到 06/02/16 11:17:59 AM
之间的所有记录输出应该是这样的
输出:
ROW_ID STATUS CREATED_DATE
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
我想检索从 06/01/16 03:1:59 AM 到 123 PROCESSED 06/02/16 11:17:59 AM
之间的所有记录“-1-XHV8EV”是数据的一部分吗?如果是这样,你将不得不做一些花哨的 SQL 语句来去除它。
它会像
CAST (LEFT(CREATED_DATE,20) as DATE)
这应该会给你一个 CASTed 日期来处理。然后你可以 运行 在
之间WHERE CAST (LEFT(CREATED_DATE,20) as DATE) between someDate and someOtherDate
Oracle 设置:
CREATE TABLE table_name ( ROW_ID, STATUS, CREATED_DATE ) AS
SELECT 123, 'PROCESSED', '06/01/16 03:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/01/16 03:18:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/02/16 10:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'INPROGRESS', '06/02/16 10:18:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'PROCESSED', '06/02/16 11:17:59 AM - 1-XHV8EV' FROM DUAL UNION ALL
SELECT 123, 'PROCESSED', '06/02/16 11:17:59 AM - 1-XHV8EV' FROM DUAL;
查询:
SELECT *
FROM table_name
WHERE TO_DATE( SUBSTR( created_date, 1, 20 ), 'MM/DD/YY HH12:MI:SS AM' )
BETWEEN TIMESTAMP '2016-06-01 03:18:59'
AND TIMESTAMP '2016-06-02 11:17:00';
输出:
ROW_ID STATUS CREATED_DATE
---------- ---------- -------------------------------
123 INPROGRESS 06/01/16 03:18:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:17:59 AM - 1-XHV8EV
123 INPROGRESS 06/02/16 10:18:59 AM - 1-XHV8EV
- 在 created_date 列上应用任何函数将停止在您的 SQL 中使用该列上的任何索引。请检查是否可以将基于函数的索引应用于 created_date 列。
- 另外,请确保您始终以准确的格式填充日期字符串,以便从 created_date 中提取日期。该格式的任何更改都会导致应用程序出错。即使您在代码级别修复此类问题,基于函数的索引也会变得多余。
总而言之,这些修复是临时的。此问题的永久修复仅适用于 table 设计。如果这是一项重大工作,请尝试制定一个计划,将其分解为多个较小的任务,并逐步更改逻辑上依赖的对象,最终一劳永逸地解决这个问题。
祝你好运。