Oracle DB
*** Variables ***
@{device_list} one two three four
${device} two
*** Keywords ***
Do something
log do something was called
Do something else
log do something else was called
*** Test Cases ***
Example
run keyword if $device in $device_list
... Run keywords
... Do something
... AND
... Do something else
查询
START_DATE |END_DATE
--------------------|-------------------
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
2016-02-01 00:00:00 |2016-02-29 23:55:00
我试图运行此查询,但我得到一些错误。有人可以知道我在这个查询中的位置吗?
我得到以下错误
SQL错误[1861] [22008]:ORA-01861:文字与格式字符串不匹配
java.sql.SQLDataException:ORA-01861:literal与格式字符串不匹配
答案 0 :(得分:2)
start_date
和end_date
已经是日期,因此您无需将其转换为日期。改为转换字符串,甚至更好地使用datetime文字。
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
and END_DATE <= timestamp '2016-02-24 00:59:00'
答案 1 :(得分:2)
不使用to_date()
列DATE
。首先将date
值转换为varchar
值,只是为了将其转换回date
的值。
to_date()
需要varchar
值,因此Oracle首先使用当前的NLS设置将DATE
值转换为varchar
值。然后它尝试使用您提供的格式掩码将varchar
转换回日期,这很可能与您拥有的默认NLS格式不匹配,因此您会收到错误。
您还应该在条件中使用正确的日期值,而不是根据当前的NLS设置(再次)隐式转换为DATE
的字符串:
select *
from VM_REPORT_TEMP_US
where START_DATE >= timestamp '2016-02-01 00:00:00'
AND END_DATE <= timestamp '2016-02-24 23:59:00'
请注意,小时24
在ISO时间戳文字中无效。
如果您想以ISO格式以外的格式提供日期/时间戳值,则需要使用to_date()
:
select *
from VM_REPORT_TEMP_US
where START_DATE >= to_date('01.02.2016 00:00:00', 'dd.mm.yyyy hh24:mi:ss')
AND END_DATE <= to_date('24.02.2016 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
答案 2 :(得分:1)
与上述两个答案都有所不同,但我会用它来避免YYYY-MM-DD
和YYYY-DD-MM
之间的混淆。
select * from VM_REPORT_TEMP_US
where
START_DATE >= to_date('2016-02-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND
END_DATE <= to_date('2016-02-24 00:59:00','YYYY-MM-DD HH24:MI:SS')