我的选择时间有问题。数据库中的时间与系统时间不同,所以我想我需要使用SELECT SYSDATE FROM DUAL
但它在另一个选择中不起作用。我使用PL / SQL Developer。
SELECT t.something1,
ROUND((TRUNC(SELECT SYSDATE FROM DUAL) - 1 + 2),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND((TRUNC(SELECT SYSDATE FROM DUAL) - 1 + 2),1);
我也尝试声明新变量,但我总是收到错误消息。
DECLARE
day DATE
SELECT SYSDATE
INTO day
FROM DUAL
SELECT t.something1,
ROUND((TRUNC(day)- 1 + 2),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND((TRUNC(day) - 1 + 2),1);
答案 0 :(得分:4)
只有在没有可供选择的表格时,您才必须使用SELECT SYSDATE FROM DUAL
获取SYSDATE
。这是因为没有SELECT
的{{1}}对Oracle无效,因此当您想要使用SQL函数而没有表时,必须使用FROM
,这是一个特殊的一行一列(名为DUAL
)表。唯一的行的值为DUMMY
。
答案 1 :(得分:1)
ROUND(number)函数仅适用于number
数据类型。它不适用于date
类型
如果您的t.something1
列数据类型是日期而不是您不能使用round()函数(您可以直接将日期与日期进行比较),如果不是并且数字超过您将使用round()并且您需要转换你的sysdate到数字和比较。
根据我的理解,你会做如下的事情:
SELECT t.something1,
ROUND(to_number(to_char(sysdate+1,'DDMMYYYY')),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND(to_number(to_char(sysdate+1,'DDMMYYYY')),1);
愿这对你有所帮助。
答案 2 :(得分:0)
您不需要子查询:
SELECT t.something1,
ROUND((TRUNC(SYSDATE) - 1 + 2),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND((TRUNC(SYSDATE) - 1 + 2),1);
这可以解决您的问题吗?