Oracle은 날짜에 '%'와 같이 사용
나의 테이블myTab열이 있습니다.startDate, "DATE"라는 데이터 유형을 가지고 있습니다.이 열의 데이터는 다음과 같이 저장됩니다.dd.mm.yyyy.
이제 다음 쿼리를 사용하여 데이터를 가져오려고 합니다.
SELECT * FROM myTab WHERE startDate like '%01.2015"
어찌된 영문인지 효과가 없는데 왜 그런지 모르겠습니다.
누군가 도와줬으면 좋겠습니다.
날짜에 텍스트를 검색하려면 날짜를 텍스트로 변환해야 합니다.
찾고 싶은 것에 대한 첫 번째 날짜와 마지막 날짜를 계산하고 그 사이에 모든 것을 얻는 것이 더 효율적입니다.이렇게 하면 텍스트 패턴 일치 대신 숫자 비교로 수행되며, 인덱스가 있는 경우 인덱스를 사용할 수 있습니다.
SELECT * FROM myTab WHERE startDate >= DATE '2015-01-01' AND startDate < DATE '2015-02-01'
SELECT * FROM myTab WHERE TO_CHAR(startDate,'dd.mm.yyyy') LIKE '%01.2015'
필드 유형이 "DATE"이면 값이 문자열로 저장되지 않고 Oracle에서 관리하는 숫자이므로 문자열로 변환해야 합니다.
SELECT * FROM myTab WHERE to_char(startDate, 'MM.YYYY') = '01.2015';
SQL 쿼리에서 날짜 범위를 사용할 수도 있습니다.
SELECT * FROM myTab
WHERE startDate
BETWEEN to_date('01.01.2015', 'DD.MM.YYYY')
AND to_date('31.01.2015', 'DD.MM.YYYY');
당신의 실제 질문에 대해 "어쩐지 잘 안되고 왜 그런지 모르겠습니다."
Oracle은 다음에서 암묵적으로 변환합니다.DATE로.VARHCAR2, 기본값을 사용합니다.NLS_DATE_FORMAT쿼리에서 사용하는 것과 다를 수 있습니다.
이 열의 데이터는 dd.mm .yyyyy와 같이 저장됩니다.
Oracle은 표시된 형식으로 날짜를 저장하지 않습니다.내부적으로 7바이트의 고유 형식으로 저장되며, 각 바이트는 날짜 시간 값의 다양한 구성 요소를 저장합니다.
WHERE startDate '%01.2015' 같은 날짜
날짜를 문자열과 비교하는 것이므로 의미가 없습니다.
성능 측면에서 날짜 열에 정규 INDEX가 있는 경우 이를 사용하도록 날짜 범위 조건을 사용해야 합니다.
SELECT * FROM table_name WHERE date_column BETWEEN DATE '2015-01-01' AND DATE '2015-02-01'
성능 측면에서 날짜 범위 조건이 더 나은 이유를 이해하려면 여기에서 제 답변을 살펴보십시오.
저는 그런 식으로 문제를 해결했습니다.개선을 위한 제안을 해주셔서 감사합니다.C#의 예.
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";
보다 상세한 답변을 제공하고 이 https://stackoverflow.com/a/42429550/1267661 답변의 문제를 해결하고자 합니다.
Oracle에서 "날짜" 유형의 열은 숫자나 문자열이 아니며, 연도, 월, 일, 시간, 분, 초를 포함하는 "날짜 시간" 값입니다.기본 시간은 항상 자정 "00:00:00"입니다.
질문:
Select * From bdPedidos Where Data Like '%" + data + "%'"
날짜 열이 문자열이 아니기 때문에 모든 상황에서 "like"를 사용하면 Oracle이 날짜 값에서 문자열 값으로 변환할 수 있습니다.문자열 값은 연도-월-일-일-일-일-일 또는 일-월-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일-일일 수 있습니다. 이 모든 것은 특정 Oracle 인스턴스가 날짜를 문자열로 표시하도록 매개 변수 NLS_DATE_FORMAT를 설정한
하루에 있을 수 있는 모든 시간을 처리하는 올바른 방법은 다음과 같습니다.
Select *
From bdPedidos
Where Data between to_date('" + data + " 00:00:00','yyyy-mm-dd hh24:mi:ss')
and to_date('" + data + " 23:59:59','yyyy-mm-dd hh24:mi:ss')
SELECT * FROM myTab WHERE startDate like '%-%-2015';
2015년의 모든 날짜를 검색합니다.이 방법이 작동하지 않으면 다음을 시도합니다.
SELECT * FROM myTab WHERE startDate like '%-%-15';
언급URL : https://stackoverflow.com/questions/33151961/oracle-use-like-on-date
'programing' 카테고리의 다른 글
| 범례 없는 판다 플롯() (0) | 2023.09.16 |
|---|---|
| 파이썬 - 아이언 파이썬 딜레마 (0) | 2023.09.16 |
| 매개 변수가 있는 Pandas read_sql (0) | 2023.09.16 |
| C++ 및 C에서 Union 초기화 (0) | 2023.09.16 |
| 비슷한 단어는 어떻게 질의합니까? (0) | 2023.09.11 |