【发布时间】:2018-10-23 19:37:38
【问题描述】:
我在 working_hour 列中有以下更新查询时间即将到来 +000000000 01:14:00.771000000 这种格式但我想显示时间 01:14:00 格式只是为了尝试使用 SUBSTR 但是它给了我 ORA-00927: 缺少等号错误 这是我的查询
UPDATE EMPLOYEE_LOGIN_TIME T1 SET SUBSTR(T1.WORKING_HOUR,12,8)=
(SELECT TO_TIMESTAMP (TO_CHAR(TIME_OUT))- TO_TIMESTAMP (TO_CHAR(TIME_IN)) AS WORKING_HOUR
FROM EMPLOYEE_LOGIN_TIME T2 WHERE TRUNC(PUNCH_DATE)=TRUNC(SYSDATE)) WHERE T1.EMPLOYEE_ID='73584' AND TRUNC(T1.PUNCH_DATE)=TRUNC(SYSDATE)
我的表结构如下:
TIME_IN TIMESTAMP(6) WITH LOCAL TIME ZONE
TIME_OUT TIMESTAMP(6) WITH LOCAL TIME ZONE
WORKING_HOUR VARCHAR2(30 BYTE)
PUNCH_DATE DATE
TIME_OUT_HISTORY VARCHAR2(200 BYTE)
【问题讨论】:
-
您必须单独分配给一个列。例如。
... SET WORKING_HOUR = ... -
UPDATE EMPLOYEE_LOGIN_TIME T1 SET T1.WORKING_HOUR=SUBSTR(T1.WORKING_HOUR,12,8) (SELECT TO_TIMESTAMP (TO_CHAR(TIME_OUT))- TO_TIMESTAMP (TO_CHAR(TIME_IN)) 作为 WORKING_HOUR FROM EMPLOYEE_LOGIN_TIME T2 WHERE TRUNC (PUNCH_DATE)=TRUNC(SYSDATE)) WHERE T1.EMPLOYEE_ID='73584' AND TRUNC(T1.PUNCH_DATE)=TRUNC(SYSDATE) 我在上面做了,但给了我 SQL 错误:ORA-00936: missing expression
-
声明看起来很奇怪。为什么你在你的日期时间列上调用
to_char只是为了应用to_timestamp呢?为什么不简单地time_out - time_in?然后在您的子查询中,无论哪个员工,您都选择了所有带有 punch_date = today 的记录。但是更新语句中的此类子查询应该恰好返回一行。请解释并展示一些示例记录和预期结果,以便我们了解您实际想要达到的目标。 -
你离那里很远。从基本更新开始。采取小步骤直到完成。
-
@ThorstenKettner:我正在创建一个应用程序,当用户登录时,用户可以在其中登录和注销,登录时间将插入数据库中的 time_in 列,当注销用户注销详细信息将输入 time_out 列现在我想找到它们之间的差异,差异是正确的 +000000000 01:14:00.771000 这种格式,但我想要 01:14:00 这种格式输出
标签: sql oracle sql-update substring