DB2 到 Oracle 的 Basic Date Time Column Between 子句的转换
DB2 to Oracle Conversion For Basic Date Time Column Between Clause
这样做是从 TABLE 中选择所有列,其中特定日期时间列介于上周日和即将到来的周六之间,总共 7 天(无论您是一周中的哪一天 运行查询)
我希望有人帮助我将以下语句转换为 Oracle,因为我发现它在 Oracle 上不起作用。
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN
current date - ((dayofweek(current date))-1) DAYS
AND
current date + (7-(dayofweek(current date))) DAYS
使用 TRUNC()
截断到一周的开始:
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN trunc(sysdate, 'WW')
and
trunc(sysdate + 7, 'WW');
sysdate
是当前系统日期,trunc
截断一个数据,WW
告诉它截断到星期(而不是日、年等)。
假设 DATE_TIME_COLUMN 是 - 应该是 - 日期数据类型,我认为这会得到你想要的。
where DATE_TIME_COLUMN between
next_day(sysdate,'SUNDAY')-7 and next_day(sysdate,'SATURDAY')
您可能需要稍微调整一下。请在http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions106.htm#SQLRF00672
的相关文档中跟进研究NEXT_DAY函数的官方文档
The proposed TRUNC does not guarantee you get the date of a particular day of the week:
SQL> alter session set nls_date_format='day dd-mon-yyyy';
Session altered.
SQL> select trunc(sysdate,'WW') from dual;
TRUNC(SYSDATE,'WW')
---------------------
friday 22-jan-2016
SQL> select trunc(sysdate+7,'WW') from dual;
TRUNC(SYSDATE+7,'WW')
---------------------
friday 29-jan-2016
在仔细研究之后,我找到了解决我的特定问题的方法,无论出于何种原因都没有管理员限制:
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN
TIMESTAMPADD(SQL_TSI_DAY, DayOfWeek(Current_Date)*(-1) + 1, Current_Date)
AND
TIMESTAMPADD(SQL_TSI_DAY, 7 - DayOfWeek(Current_Date), Current_Date)
这样做是从 TABLE 中选择所有列,其中特定日期时间列介于上周日和即将到来的周六之间,总共 7 天(无论您是一周中的哪一天 运行查询)
我希望有人帮助我将以下语句转换为 Oracle,因为我发现它在 Oracle 上不起作用。
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN
current date - ((dayofweek(current date))-1) DAYS
AND
current date + (7-(dayofweek(current date))) DAYS
使用 TRUNC()
截断到一周的开始:
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN trunc(sysdate, 'WW')
and
trunc(sysdate + 7, 'WW');
sysdate
是当前系统日期,trunc
截断一个数据,WW
告诉它截断到星期(而不是日、年等)。
假设 DATE_TIME_COLUMN 是 - 应该是 - 日期数据类型,我认为这会得到你想要的。
where DATE_TIME_COLUMN between
next_day(sysdate,'SUNDAY')-7 and next_day(sysdate,'SATURDAY')
您可能需要稍微调整一下。请在http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions106.htm#SQLRF00672
的相关文档中跟进研究NEXT_DAY函数的官方文档The proposed TRUNC does not guarantee you get the date of a particular day of the week:
SQL> alter session set nls_date_format='day dd-mon-yyyy';
Session altered.
SQL> select trunc(sysdate,'WW') from dual;
TRUNC(SYSDATE,'WW')
---------------------
friday 22-jan-2016
SQL> select trunc(sysdate+7,'WW') from dual;
TRUNC(SYSDATE+7,'WW')
---------------------
friday 29-jan-2016
在仔细研究之后,我找到了解决我的特定问题的方法,无论出于何种原因都没有管理员限制:
SELECT *
FROM TABLE
WHERE DATE_TIME_COLUMN
BETWEEN
TIMESTAMPADD(SQL_TSI_DAY, DayOfWeek(Current_Date)*(-1) + 1, Current_Date)
AND
TIMESTAMPADD(SQL_TSI_DAY, 7 - DayOfWeek(Current_Date), Current_Date)