Oracle SQL 날짜 비교
1994년 6월 20일 이후에 고용된 직원 수를 표시하려고 하는데
Select employee_id, count(*)
From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > 31-DEC-95;
근데 에러가 나서
"JUN" 식별자가 잘못되었습니다.
제발 도와주세요, 고마워요!
31-DEC-95
끈도 아니다20-JUN-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')
이 방법에는 몇 가지 불필요한 함정이 있다
- 기재되어 은 a_horse_no_name입니다.
DEC
반드시 12월을 의미하는 것은 아닙니다.및 설정에 따라 다릅니다.비교가 모든 로케일에서 작동하도록 하려면 datetime 형식 모델을 사용할 수 있습니다.MM
대신에 - 95년은 정확하지 않아1995년이라는 거 알지? 하지만 50년이라면 1950년인가 2050년인가?항상 분명하게 말하는 것이 최선이다.
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
날짜 리터럴
날짜 리터럴은 ANSI 표준의 일부이므로 Oracle 관련 함수를 사용할 필요가 없습니다.리터럴을 사용하는 경우 날짜를 형식으로 지정해야 합니다.YYYY-MM-DD
시간 요소를 포함할 수 없습니다.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
날짜 에는 시간되어 있기 날짜는 Oracle 날짜와 .1995-12-31 00:00:00
.
리터럴을 . 리터럴은 타임스탬프 리터럴 형식으로 타임스탬프 리터럴은 다음 형식을 사용합니다.YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
추가정보
NLS_DATE_LANGUAGE
는 에서 파생되며 에서 파생됩니다.데이터베이스를 처음 만들 때 설정되지만 초기화 매개 변수 파일을 정말 필요한 경우에만 변경하거나 구문을 사용하여 세션 수준에서 변경할 수 있습니다.예:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
이것은 다음을 의미합니다.
DD
~31 의 의 숫자.MM
~ 은 0101 ~ 12 (1월은 01)의 달YYYY
4자리 연도 - 내 생각에 이것은 항상 2자리 연도보다 낫다.YY
당신이 말하는 세기와 혼동하지 않기 때문입니다.HH24
시각, 0 ~ 23MI
분, 0 ~ 59SS
분초, 0-59
현재 언어 및 날짜 언어 설정은 다음을 통해 확인할 수 있습니다.V$NLS_PARAMETERSs
쿼리함으로써 유효한 값의 전체 범위를 확인합니다.V$NLS_VALID_VALUES
.
추가 정보
덧붙여서, 만약 당신이 원하는 것이count(*)
그룹화해야 합니다.employee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
이것으로, 다음의 카운트를 알 수 있습니다. employee_id
.
결론,
to_char
나름의 방법으로 기능하다
그렇게,
비교에는 항상 MM-DD-YY 또는 DD-MM-YYY 또는 기타 형식 대신 이 YYY-MM-DD 형식을 사용하십시오.
다음과 같이 trunk 및 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;
문의 내용:
Select employee_id, count(*) From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > '31-DEC-95'
1994년 6월 20일 이후에 고용된 직원 수를 표시하지 않기 위해서라고 생각합니다.종업원수를 표시하는 경우는, 다음의 항목을 사용할 수 있습니다.
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;
날짜를 문자로 변환했으므로 단일 따옴표가 있어야 합니다.
employee_id, count(*)를 선택합니다.종업원으로부터여기서 to_char(employe_date_hired, 'DD-MON-YY')> '31-DEC-95';
언급URL : https://stackoverflow.com/questions/10178292/comparing-dates-in-oracle-sql
'programing' 카테고리의 다른 글
기본 키 변경 (0) | 2023.02.14 |
---|---|
ng-click이 ng-blur 이벤트보다 우선하도록 강제하려면 어떻게 해야 합니까? (0) | 2023.02.14 |
Ionic 프레임워크 $state.go('app')home' )는 이동처 페이지의 뒤로 버튼을 추가하는 것입니까(삭제 방법)? (0) | 2023.02.14 |
Wordpress 메뉴에 사용자 정의 마크업 추가 (0) | 2023.02.14 |
RoboPOJ 사용방법Android Studio에서 Json에서 모델 클래스를 자동으로 생성하는 OGenerator (0) | 2023.02.14 |