简体   繁体   English

oracle SQL 如何从日期中删除时间

[英]oracle SQL how to remove time from date

I have a column named StartDate containing a date in this format: 03-03-2012 15:22我有一个名为StartDate的列,其中包含以下格式的日期: 03-03-2012 15:22

What I need is to convert it to date.我需要的是将其转换为日期。 It should be looking like this: DD/MM/YYYY它应该是这样的: DD/MM/YYYY

What I have tried without success is:我尝试过但没有成功的是:

select 
p1.PA_VALUE as StartDate,
p2.PA_VALUE as EndDate
from WP_Work p 
LEFT JOIN PARAMETER p1 on p1.WP_ID=p.WP_ID AND p1.NAME = 'StartDate'
LEFT JOIN PARAMETER p2 on p2.WP_ID=p.WP_ID AND p2.NAME = 'Date_To'
WHERE p.TYPE = 'EventManagement2'
AND TO_DATE(p1.PA_VALUE, 'DD/MM/YYYY') >= TO_DATE('25/10/2012', 'DD/MM/YYYY')
AND TO_DATE(p2.PA_VALUE, 'DD/MM/YYYY') <= TO_DATE('26/10/2012', 'DD/MM/YYYY')

Is there a way to do this?有没有办法做到这一点?

EDIT1: the PA_VALUE column is: VARCHAR2 EDIT1: PA_VALUE列是: VARCHAR2

You can use TRUNC on DateTime to remove Time part of the DateTime.您可以在 DateTime 上使用TRUNC来删除 DateTime 的时间部分。 So your where clause can be:所以你的 where 子句可以是:

AND TRUNC(p1.PA_VALUE) >= TO_DATE('25/10/2012', 'DD/MM/YYYY')

The TRUNCATE (datetime) function returns date with the time portion of the day truncated to the unit specified by the format model. TRUNCATE (datetime) 函数返回日期,其中日期的时间部分被截断为格式模型指定的单位。

When you convert your string to a date you need to match the date mask to the format in the string.当您将字符串转换为日期时,您需要将日期掩码与字符串中的格式相匹配。 This includes a time element, which you need to remove with truncation:这包括一个时间元素,您需要将其删除并截断:

select 
    p1.PA_VALUE as StartDate,
    p2.PA_VALUE as EndDate
from WP_Work p 
LEFT JOIN PARAMETER p1 on p1.WP_ID=p.WP_ID AND p1.NAME = 'StartDate'
LEFT JOIN PARAMETER p2 on p2.WP_ID=p.WP_ID AND p2.NAME = 'Date_To'
WHERE p.TYPE = 'EventManagement2'
AND trunc(TO_DATE(p1.PA_VALUE, 'DD-MM-YYYY HH24:MI')) >= TO_DATE('25/10/2012', 'DD/MM/YYYY')
AND trunc(TO_DATE(p2.PA_VALUE, 'DD-MM-YYYY HH24:MI')) <= TO_DATE('26/10/2012', 'DD/MM/YYYY')

We can use TRUNC function in Oracle DB.我们可以在 Oracle DB 中使用 TRUNC 函数。 Here is an example.这是一个例子。

SELECT TRUNC(TO_DATE('01 Jan 2018 08:00:00','DD-MON-YYYY HH24:MI:SS')) FROM DUAL

Output: 1/1/2018输出:1/1/2018

Try尝试

SELECT to_char(p1.PA_VALUE,'DD/MM/YYYY') as StartDate,
       to_char(p2.PA_VALUE,'DD/MM/YYYY') as EndDate
   ...

If your column with DATE datatype has value like below : -如果您的 DATE 数据类型列具有如下值:-

value in column : 10-NOV-2005 06:31:00列中的值:2005 年 11 月 10 日 06:31:00

Then, You can Use TRUNC function in select query to convert your date-time value to only date like - DD/MM/YYYY or DD-MON-YYYY然后,您可以在选择查询中使用 TRUNC 函数将您的日期时间值转换为仅日期,例如 - DD/MM/YYYY 或 DD-MON-YYYY

select TRUNC(column_1) from table1;从 table1 中选择 TRUNC(column_1);

result : 10-NOV-2005结果:2005 年 11 月 10 日

You will see above result - Provided that NLS_DATE_FORMAT is set as like below :-您将看到以上结果 - 前提是 NLS_DATE_FORMAT 设置如下:-

Alter session NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';更改会话 NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM