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

csbfibhn  于 2023-02-15  发布在  Oracle
关注(0)|答案(6)|浏览(225)

我有一个名为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')

有什么办法吗?
编辑1:PA_VALUE列为:VARCHAR2

2q5ifsrm

2q5ifsrm1#

您可以在DateTime上使用TRUNC来删除DateTime的Time部分。因此,您的where子句可以是:

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

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

ttcibm8c

ttcibm8c2#

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

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

超出了问题的范围,但将日期存储为字符串是一种糟糕的做法,存储日期时间更糟糕。
1.我们需要将字符串转换为日期,以便对它们进行任何形式的日期处理(算术、间隔评估等
1.字符串不提供格式保证,所以我们冒着数据损坏的风险,我们可以通过使用VALIDATE_CONVERSION()(从12c开始可用,find out more)来防止这种情况,但它仍然是PITN
1.使用非标准的数据类型会使我们更难对数据模型和基于它构建的代码进行推理。

kzmpq1sx

kzmpq1sx3#

我们可以在Oracle数据库中使用TRUNC函数。下面是一个例子。

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

输出日期:2018年1月1日

koaltpgm

koaltpgm4#

试试看

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

mqkwyuun5#

如果DATE数据类型的列具有如下值:-
列中的值:2005年11月10日06:31:00
然后,您可以在选择查询中使用TRUNC函数将日期时间值转换为仅日期,如- DD/MM/YYYY或DD-MON-YYYY
从表1中选择TRUNC(第1列);
结果:2005年11月10日
您将看到上述结果-假设NLS_DATE_FORMAT设置如下:-
更改会话NLS_DATE_FORMAT =“年-月-日HH 24:MI:SS”;

mpgws1up

mpgws1up6#

还有如下的扩展用法:

WITH dates AS (   
  SELECT date'2015-01-01' d FROM dual union   
  SELECT date'2015-01-10' d FROM dual union   
  SELECT date'2015-02-01' d FROM dual union   
  SELECT timestamp'2015-03-03 23:45:00' d FROM dual union   
  SELECT timestamp'2015-04-11 12:34:56' d FROM dual    
)   
SELECT d "Original Date",   
       trunc(d) "Nearest Day, Time Removed",   
       trunc(d, 'ww') "Nearest Week", 
       trunc(d, 'iw') "Start of Week",   
       trunc(d, 'mm') "Start of Month",   
       trunc(d, 'year') "Start of Year"   
FROM dates;

Oracle官方帮助页

相关问题