[SQL] 오라클 SQL에서 날짜 비교
SQL오라클 SQL에서 날짜 비교
나는 그것이 1994년 6월 20일 후 고용 직원의 수를 표시하는 얻으려고 하지만 6 월 '잘못된 식별자 "라는 오류가 발생합니다. 도와주세요, 감사합니다!
Select employee_id, count(*)
From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > 31-DEC-95;
해결법
-
==============================
1.31 ~ 12-95 문자열 아니며 6 월 20 - 94이다. 그들은 마지막에 추가 된 몇 가지 여분의 물건 번호입니다. '노트 작은 따옴표 - 이는 '31 -dec-95'또는 '20 -JUN-94 '을해야한다. 이 문자열 비교를 할 수있게된다.
31 ~ 12-95 문자열 아니며 6 월 20 - 94이다. 그들은 마지막에 추가 된 몇 가지 여분의 물건 번호입니다. '노트 작은 따옴표 - 이는 '31 -dec-95'또는 '20 -JUN-94 '을해야한다. 이 문자열 비교를 할 수있게된다.
그러나 문자열 비교를 수행하지 않는; 당신은 날짜 비교를하고 있습니다. 당신은 날짜로 문자열을 변환해야합니다. 어느 내장 TO_DATE () 함수 또는 날짜 리터럴을 이용하여.
select employee_id from employee where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
이 방법은 몇 가지 불필요한 함정이있다
select employee_id from employee where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
날짜 리터럴은 오라클 특정 기능을 사용하지 않아도 의미 ANSI 표준의 일부입니다. 리터럴을 사용할 때의 형식은 YYYY-MM-DD의 날짜를 지정해야합니다 당신은 시간 요소를 포함 할 수 없습니다.
select employee_id from employee where employee_date_hired > date '1995-12-31'
시간 부분없이 날짜 1995년 12월 31일 00:00:00 상당하므로 오라클 날짜 데이터 타입은 시간 요소를 포함하는 것을 기억하라.
MI : 당신이 다음 시간 부분을 포함 할 경우의 형식은 YYYY-MM-DD HH24 소요 시간 소인 문자 그대로 사용해야 할 것 SS [.FF0-9을]
select employee_id from employee where employee_date_hired > timestamp '1995-12-31 12:31:02'
NLS_DATE_LANGUAGE은 NLS_LANGUAGE로부터 유도되고 NLS_DATE_FORMAT은 NLS_TERRITORY에서 파생된다. 정말 필요한 경우에만 - - 또는 ALTER SESSION 구문을 사용하여 세션 수준에서 처음 데이터베이스를 만들었지 만 그들은 당신의 inialization 매개 변수 파일을 변경하여 변경 될 수있는 경우이 설정됩니다. 예를 들어 :
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
이 수단 :
당신은 V $ NLS_VALID_VALUES를 조회하여 V $ NLS_PARAMETERS 및 유효한 값의 전체 범위를 쿼리하여 현재 언어와 날짜 언어 설정을 확인할 수 있습니다.
당신은 COUNT (*)를 원하는 경우 또한, 당신은 employee_id입니다으로 그룹에 필요
select employee_id, count(*) from employee where employee_date_hired > date '1995-12-31' group by employee_id
이렇게하면 employee_id입니다 당 수를 제공합니다.
-
==============================
2.결론,
결론,
TO_CHAR는 자신의 방식으로 작동
그래서,
항상 비교를 위해이 형식 YYYY-MM-DD를 사용 대신 MM-DD-YY 또는 DD-MM-YYYY 또는 다른 형식의
-
==============================
3.다음과 같이 TRUNC 및 TO_DATE을 사용할 수 있습니다 :
다음과 같이 TRUNC 및 TO_DATE을 사용할 수 있습니다 :
select TO_CHAR (g.FECHA, 'DD-MM-YYYY HH24:MI:SS') fecha_salida, g.NUMERO_GUIA, g.BOD_ORIGEN, g.TIPO_GUIA, dg.DOC_NUMERO, dg.* from ils_det_guia dg, ils_guia g where dg.NUMERO_GUIA = g.NUMERO_GUIA and dg.TIPO_GUIA = g.TIPO_GUIA and dg.BOD_ORIGEN = g.BOD_ORIGEN and dg.LAB_CODIGO = 56 and trunc(g.FECHA) > to_date('01/02/15','DD/MM/YY') order by g.FECHA;
-
==============================
4.쿼리에서 :
쿼리에서 :
Select employee_id, count(*) From Employee Where to_char(employee_date_hired, 'DD-MON-YY') > '31-DEC-95'
난, 당신이 사용할 수있는 당신이 직원의 수 표시를 원하는 경우 6 월 20 일, 1994 년 이후에 고용되는 직원의 수를 표시하지의 생각 :
Select count(*) From Employee Where to_char(employee_date_hired, 'YYYMMMDDD') > 19940620
나는 당신이 사용할 수있는 비교 날짜에 가장 좋은 방법에 대한 생각 :
employee_date_hired > TO_DATE('20-06-1994', 'DD-MM-YYYY'); or to_char(employee_date_hired, 'YYYMMMDDD') > 19940620;
-
==============================
5.날짜를 문자로 변환하기 때문에 단일 인용,이 있어야합니다.
날짜를 문자로 변환하기 때문에 단일 인용,이 있어야합니다.
Select employee_id, count(*) From Employee Where to_char(employee_date_hired, 'DD-MON-YY') > '31-DEC-95';
from https://stackoverflow.com/questions/10178292/comparing-dates-in-oracle-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 두 테이블에 MySQL에 합류? (0) | 2020.03.16 |
---|---|
[SQL] 다중 부분 식별자는 바인딩 수 없습니다 (0) | 2020.03.15 |
[SQL] MySQL의 테이블이 마지막으로 업데이트 할 때 어떻게 알 수 있습니까? (0) | 2020.03.15 |
[SQL] 어떻게 저장 프로 시저와 DbContext.Database.SqlQuery <TElement> (SQL, PARAMS)를 사용 하는가? EF 코드 첫 번째 CTP5 (0) | 2020.03.15 |
[SQL] SQL 서버로 가져 오기 CSV 파일 (0) | 2020.03.15 |