programing

Oracle SQL 날짜에서 시간을 제거하는 방법

subpage 2023. 3. 25. 11:07
반응형

Oracle SQL 날짜에서 시간을 제거하는 방법

라는 컬럼이 있습니다.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

TRUNC on DateTime을 사용하여 DateTime의 Time 부분을 삭제할 수 있습니다.따라서 your where 절은 다음과 같습니다.

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

TRUNCATE(datetime) 함수는 형식 모델에서 지정된 단위로 시간 부분이 잘린 날짜를 반환합니다.

문자열을 날짜로 변환할 경우 날짜 마스크를 문자열 형식과 일치시켜야 합니다.여기에는 시간 요소가 포함됩니다.시간 요소는 잘라내기와 함께 삭제해야 합니다.

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. 어떤 형태의 날짜 처리(산술, 간격 평가 등)를 하기 위해서는 문자열을 날짜로 변환해야 합니다.
  2. 문자열은 형식에 대한 보증을 제공하지 않으므로 날짜 손상이 코드를 손상시킬 위험이 있습니다.우리는 이것을 방어할 수 있습니다.VALIDATE_CONVERSION()(12c부터 이용 가능, 자세한 것은 이쪽)하지만, 아직 PITN입니다.
  3. 비표준 데이터형을 사용하면 데이터 모델과 그 위에 구축한 코드에 대해 추론하기가 어려워집니다.

Oracle DB에서 TRUNC 함수를 사용할 수 있습니다.여기 예가 있습니다.

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

출력: 2018년 1/1

해라

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

DATE 데이터형이 있는 컬럼의 값이 다음과 같은 경우: -

컬럼 값: 2005년 11월 10일 06:31:00

그런 다음 선택 쿼리에서 TRUNC 함수를 사용하여 날짜 값을 DD/MM/YYY 또는 DD-MON-YYY와 같은 날짜로만 변환할 수 있습니다.

table1에서 TRUNC(column_1)를 선택한다.

결과: 2005년 11월 10일

위의 결과가 표시됩니다.NLS_DATE_FORMAT 이 다음과 같이 설정되어 있는 경우:-

세션 NLS_DATE_FORMAT = 'DD-MON-YYY HH24:MI: SS';

다음과 같은 확장된 사용도 있습니다.

  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 Offical 도움말 페이지

언급URL : https://stackoverflow.com/questions/13135552/oracle-sql-how-to-remove-time-from-date

반응형