我有一个Oracle查询,使用“在FROM和TO之间有什么关系”,并且from / to不相同,但是当它们相同时,它就不能正常工作。
我尝试在PHP上验证from / to是否相同,然后我更改查询,将BETWEEN替换为“ WHERE something = date”,但它也不起作用。
这是我提到的带有PHP验证的查询:
<?php
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 191.238.210.61)(PORT = 1521)))(CONNECT_DATA=(SID=opera)))";
$conn = oci_connect("opera", "opera", $db);
if (!$conn):
#--- Si no hay conexión, muestra error y detiene la depuración
$m = oci_error();
echo $m['message'];
elseif ($desde == $hasta):
$consulta = "
SELECT
CONFIRMATION_NO,
NATIONALITY_DESC,
GUEST_NAME,
ADULTS,
CHILDREN,
RATE_CODE,
TRACE_ON,
DEPT_ID,
SUM(ADULTS) OVER()
|| ' ADULTOS Y '
|| SUM(CHILDREN) OVER()
|| ' NIÑOS' AS RESULT
FROM
( SELECT
MAX(CONFIRMATION_NO) AS CONFIRMATION_NO,
NATIONALITY_DESC,
GUEST_FIRST_NAME
|| ' '
|| GUEST_NAME GUEST_NAME,
MAX(ADULTS) AS ADULTS,
MAX(CHILDREN) AS CHILDREN,
RATE_CODE,
MIN(TRACE_ON) AS TRACE_ON,
LISTAGG(GUEST_RSV_TRACES.DEPT_ID, ',') WITHIN GROUP (ORDER BY NULL) AS DEPT_ID
FROM
GUEST_RSV_TRACES,
NAME_RESERVATION
WHERE trace_on = '$desde'
AND guest_rsv_traces.resv_name_id = name_reservation.resv_name_id
AND rate_code like 'ALL%'
AND resv_status not in ('CANCELLED')
AND guest_rsv_traces.dept_id not in ('TRF','OD')
GROUP BY
NATIONALITY_DESC,
GUEST_FIRST_NAME,
GUEST_NAME,
RATE_CODE
)
";
$query = oci_parse($conn, $consulta);
oci_execute($query);
elseif ($desde != $hasta):
$consulta = "
SELECT
CONFIRMATION_NO,
NATIONALITY_DESC,
GUEST_NAME,
ADULTS,
CHILDREN,
RATE_CODE,
TRACE_ON,
DEPT_ID,
SUM(ADULTS) OVER()
|| ' ADULTOS Y '
|| SUM(CHILDREN) OVER()
|| ' NIÑOS' AS RESULT
FROM
( SELECT
MAX(CONFIRMATION_NO) AS CONFIRMATION_NO,
NATIONALITY_DESC,
GUEST_FIRST_NAME
|| ' '
|| GUEST_NAME GUEST_NAME,
MAX(ADULTS) AS ADULTS,
MAX(CHILDREN) AS CHILDREN,
RATE_CODE,
MIN(TRACE_ON) AS TRACE_ON,
LISTAGG(GUEST_RSV_TRACES.DEPT_ID, ',') WITHIN GROUP (ORDER BY NULL) AS DEPT_ID
FROM
GUEST_RSV_TRACES,
NAME_RESERVATION
WHERE trace_on BETWEEN '$desde' and '$hasta'
AND guest_rsv_traces.resv_name_id = name_reservation.resv_name_id
AND rate_code like 'ALL%'
AND resv_status not in ('CANCELLED')
AND guest_rsv_traces.dept_id not in ('TRF','OD')
GROUP BY
NATIONALITY_DESC,
GUEST_FIRST_NAME,
GUEST_NAME,
RATE_CODE
)
";
$query = oci_parse($conn, $consulta);
oci_execute($query);
endif;
?>
输出示例:(在“ 05-SEP-19”和“ 10-SEP-19”之间使用):
145580 EE.UU JAMES LANTZKE 3 0 ALLIN5NMT 05/09/19 HK 6 ADULTOS Y 0 NIÑOS
167410 EE.UU KATHARINE BLOOD 3 0 ALLIN5NMT 05/09/19 HK 6 ADULTOS Y 0 NIÑOS
摘要:
我想知道如何使用BETWEEN来查询同一天,或者如何获取搜索特定日期的结果。
¡¡事先感谢!
答案 0 :(得分:2)
日期始终具有以下组成部分:年,月,日,小时,分钟和秒。用户界面并不总是显示所有这些组件(但是它们仍然总是存在)。
如果您的TRACE_ON
列中的日期为2019-09-05T12:34:56
,并且您尝试查看日期是否为BETWEEN '05-SEP-19' AND '05-SEP-19'
,则Oracle将(假定与NLS_DATE_FORMAT
会话参数匹配)进行转换日期为午夜且2019-09-05T12:34:56 BETWEEN 2019-09-05T00:00:00 AND 2019-09-05T00:00:00
为假的字符串,因此将不返回该行。
将查询更改为:
SELECT
-- ...
TO_CHAR( TRACE_ON, 'YYYY-MM-DD HH24:MI:SS' ),
-- ...
FROM (
SELECT
-- ...
FROM GUEST_RSV_TRACES
INNER JOIN NAME_RESERVATION
ON ( guest_rsv_traces.resv_name_id = name_reservation.resv_name_id )
WHERE trace_on >= TO_DATE( '$desde', 'DD-MON-RR' )
AND trace_on < TO_DATE( '$hasta', 'DD-MON-RR' ) + INTERVAL '1' DAY
AND -- ...
GROUP BY
-- ...
)
答案 1 :(得分:0)
如果要与这些“日期”进行比较的列属于driver.get("http://www.ncsl.org/research/transportation/autonomous-vehicles-legislative-database.aspx")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[contains(@for, '_StateNetDB_ckBxAllTopics')]"))).click()
driver.find_element_by_xpath("//label[contains(@for, '_StateNetDB_ckBxAllStates')]").click()
数据类型,则不应将其与字符串进行比较,因为DATE
(同样和所有其他值一样)是字符串,而不是日期。不要依赖隐式转换-使用'05-SEP-19'
函数或日期文字。
例如:
to_date
或(假设您的NLS设置设为英语)
between date '2019-09-05' and date '2019-09-05'
因为,如果正确执行操作,则两次之间的工作均符合预期。看看:
between to_date('05-sep-19', 'dd-mon-rr') and to_date('05-sep-19', 'dd-mon-rr')