51

我有一个名为的列StartDate,其中包含这种格式的日期:03-03-2012 15:22

我需要的是把它转换成日期。它应该看起来像这样:DD/MM/YYYY

我没有成功的尝试是:

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')

有没有办法做到这一点?

EDIT1:该PA_VALUE列是:VARCHAR2

4

5 回答 5

66

您可以在 DateTime 上使用TRUNC来删除 DateTime 的时间部分。所以你的 where 子句可以是:

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

TRUNCATE (datetime) 函数返回日期,其中一天中的时间部分被截断为格式模型指定的单位。

于 2012-10-30T09:01:14.387 回答
24

当您将字符串转换为日期时,您需要将日期掩码与字符串中的格式相匹配。这包括一个时间元素,您需要使用截断来删除它:

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')
于 2012-10-30T09:33:56.927 回答
10

我们可以在 Oracle DB 中使用 TRUNC 函数。这是一个例子。

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

输出:2018 年 1 月 1 日

于 2018-01-18T01:05:15.960 回答
7

尝试

SELECT to_char(p1.PA_VALUE,'DD/MM/YYYY') as StartDate,
       to_char(p2.PA_VALUE,'DD/MM/YYYY') as EndDate
   ...
于 2012-10-30T09:47:56.123 回答
1

如果您的 DATE 数据类型的列具有如下值:-

列中的值:2005 年 11 月 10 日 06:31:00

然后,您可以在选择查询中使用 TRUNC 函数将您的日期时间值转换为仅日期,例如 - DD/MM/YYYY 或 DD-MON-YYYY

从 table1 中选择 TRUNC(column_1);

结果:2005 年 11 月 10 日

您将看到上述结果 - 前提是 NLS_DATE_FORMAT 设置如下:-

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

于 2019-11-22T09:52:32.080 回答