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')
질문의 범위 밖이지만 날짜를 문자열로 저장하는 것은 잘못된 관행이며 날짜 시간을 저장하는 것은 더 좋지 않습니다.
- 어떤 형태의 날짜 처리(산술, 간격 평가 등)를 하기 위해서는 문자열을 날짜로 변환해야 합니다.
- 문자열은 형식에 대한 보증을 제공하지 않으므로 날짜 손상이 코드를 손상시킬 위험이 있습니다.우리는 이것을 방어할 수 있습니다.
VALIDATE_CONVERSION()
(12c부터 이용 가능, 자세한 것은 이쪽)하지만, 아직 PITN입니다. - 비표준 데이터형을 사용하면 데이터 모델과 그 위에 구축한 코드에 대해 추론하기가 어려워집니다.
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;
언급URL : https://stackoverflow.com/questions/13135552/oracle-sql-how-to-remove-time-from-date
'programing' 카테고리의 다른 글
스크립트 실행 중에 AJAX 콜이 반환되면 JavaScript는 어떻게 됩니까? (0) | 2023.04.04 |
---|---|
Oracle에서 현재 열려 있는 커서 찾는 방법 (0) | 2023.03.25 |
반응에서 material-UI 선택 상자에서 기본값을 설정하는 방법은 무엇입니까? (0) | 2023.03.25 |
Angularjs를 사용하여 로컬 스토리지에 데이터를 저장하는 방법은 무엇입니까? (0) | 2023.03.25 |
angularjs에서 inside select box 옵션을 ng-translate하는 방법 (0) | 2023.03.25 |