我正在尝试从用户输入的年份中获取日期和月份。
我使用的查询是:
SELECT trans_date FROM transactions WHERE (SUBSTR(trans_date,4,4) = 'June' AND TO_NUMBER(SUBSTR(trans_date,9,4)) = 2010);
这不起作用,但是如果我对DUAL表做同样的事情,就可以了。
SELECT SUBSTR('22-June-2018', 4, 4) FROM DUAL;
这是什么问题?
答案 0 :(得分:3)
您是否考虑过类似to_char()
的事情?
SELECT trans_date
FROM transactions
WHERE TO_CHAR(trans_date, 'YYYY-MM') = '2010-06';
或者更好的是,进行适当的日期比较:
WHERE trans_date >= DATE '2010-06-01' AND
trans_date < DATE '2010-07-01'
这具有查询可以使用trans_date
上的索引的优点。
答案 1 :(得分:2)
<?php
$Partenza = $partenzaSel = $partenzaTArea = $destinazioneSel =
$destinazioneTArea = $nPasseggeri = "";
if (isset($_POST['partenzaSel']) and isset($_POST['partenzaTArea']) and
isset($_POST['destinazioneSel']) and isset($_POST['destinazioneTArea']) and
isset($_POST['nPasseggeri']) ){
$partenzaSel = $_POST['partenzaSel'];
$partenzaTArea = $_POST['partenzaTArea'];
$destinazioneSel = $_POST['destinazioneSel'];
$destinazioneTArea = $_POST['destinazioneTArea'];
$nPasseggeri = $_POST['nPasseggeri'];
echo $partenzaSel .'--'. $partenzaTArea .'--'. $destinazioneSel .'--'.
$destinazioneTArea .'--'. $nPasseggeri .'--'. "prova";
}
?>
答案 2 :(得分:1)
这是什么问题?
SUBSTR( string_value, start, length )
将字符串数据类型作为第一个参数。 '22-June-2018'
不是DATE
数据类型-它是字符串数据类型(恰好包含我们认为是日期的字符);因此使用SUBSTR( '22-June-2018', 4, 4 )
可以按预期工作。
trans_date
是DATE
数据类型,而不是字符串数据类型。
SUBSTR( trans_date, 4, 4 )
涉及从日期到字符串的隐式转换;这样做是有效的:
SUBSTR( TO_CHAR( trans_date ), 4, 4 )
因为,TO_CHAR( date_value, format_model )
需要知道如何将DATE
格式化为字符串,如果您不提供第二个参数,则它将使用NLS_DATE_FORMAT
会话参数,并且表达式为有效地:
SUBSTR(
TO_CHAR(
trans_date
( SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT' )
),
4,
4
)
如果NLS_DATE_FORMAT
会话参数与DD-Month-YYYY
不匹配(或等同于第4-7个字符是月份(仅用于4个字符的月份名称)和第9-12个字符的等效项是年份(同样,只有4个字符的名称,这才适用于月份),则您的查询将无效。
我正在尝试从用户输入的年份中获取日期和月份。
使用EXTRACT
:
SELECT trans_date
FROM transactions
WHERE EXTRACT( MONTH FROM trans_date ) = 6
AND EXTRACT( YEAR FROM trans_date ) = 2010
使用TO_CHAR( date_value, format_model )
:
SELECT trans_date
FROM transactions
WHERE TO_CHAR( trans_date, 'Month' ) = 'June'
AND TO_CHAR( trans_date, 'year' ) = '2010'
使用日期文字:
SELECT trans_date
FROM transactions
WHERE trans_date >= DATE '2010-06-01'
AND trans_date < ADD_MONTHS( DATE '2010-06-01', 1 );
使用TRUNC( date_value, 'MM' )
:
SELECT trans_date
FROM transactions
WHERE TRUNC( trans_date, 'MM' ) = DATE '2010-06-01';
答案 3 :(得分:-1)
你可以像这样使用
WHERE TO_CHAR(date_column_name,'MM-YYYY')='06-2010'