[SQL] JDBC와 SQL에서 날짜 사이세요?
SQLJDBC와 SQL에서 날짜 사이세요?
저는 현재 테이블에 참견 마라 데이터베이스 파일 및 표시 특정 정보에서 데이터를 읽는 자바 스윙 응용 프로그램을 쓰고 있어요. 나는 성공적으로 필요한 SQL 문을 생성 할 수있었습니다 그러나 나는 (우리는 한계 결과에 노력하고있다, 그래서 우리의 데이터베이스가 꽤 큰) 날짜 사이에 검색 할 수있는 기능을 추가하는 데 문제가 있습니다. 내 쿼리 중 하나의 예는 다음 (자바로 작성된)한다 :
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
+ ";");
나는 (그들이 실제로 자바에서 문자열하지만 일 / 월 / 년으로 포맷 된) 두 날짜가 있습니다.
나는 다른 AND 절을 사용하여 시도 내 WHERE와 문 BETWEEN하지만 오른쪽 피연산자의 문자 값을 받고 JDBC [MYOB ODBC] 오류에서 다음과 같은 오류가 발생합니다.
실제 문은 다음과 같습니다 :
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ "AND sales.Date BETWEEN " + sdate + " AND " + edate + " "
+ "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
+ ";");
그 누구도 날이에 대한 올바른 구문을 작업 할 수 있도록 할 수 있습니까? 그것은 실종 기능의 마지막 조각입니다.
편집 : 그들은 오늘 날짜로 기본 설정으로 sdate 및 EDATE의 현재 값은 각각 모두 25/10/2013이다. 나는이 날짜 범위에 데이터를 제공을 보장하기 위해 테스트입니다 더미 파일을 설정했습니다. 또한 clarficiation 위해 나는 INCLUSIVE로 검색 날짜를하고 싶습니다.
해결법
-
==============================
1.따옴표를 날짜 주위에 사용
따옴표를 날짜 주위에 사용
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date " + "FROM sales, customers " + "WHERE sales.CardRecordID = customers.CardRecordID " + "AND customers.Name = 'Cash Sales' " + "AND sales.Date BETWEEN '" + sdate + "' AND '" + edate + "' " + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC" + ";");
아니면 (날짜 예를 들어 신뢰할 수없는 입력에서 오는 경우) 준비된 문을 사용하는 것이 더 안전 할 수 있습니다
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date startDate = formatter.parse(sdate); java.util.Date endDate = formatter.parse(edate); PreparedStatement pstmt = connection.prepareStatement("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date " + "FROM sales, customers " + "WHERE sales.CardRecordID = customers.CardRecordID " + "AND customers.Name = 'Cash Sales' " + "AND sales.Date BETWEEN ? AND ? " + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"); pstmt.setDate(1, new java.sql.Date(startDate.getTime())) pstmt.setDate(2, new java.sql.Date(endDate.getTime()))
사이 연산자는 포함하지만, 데이터베이스 필드가 실제로 타임 스탬프의 경우, 다음 짧은 시간과 날짜는 시간을 00으로 가정 : 00 : 00.000. 날짜가 포함 될 수 있도록 그래서, 이러한 경우에, 당신은 당신의 종료 날짜에 하루 추가 할 수 있습니다. (: 00 : 00 00.000 시간) 기술적으로는 다음 날의 첫 순간을 포함하지만, 응용 프로그램에 따라하는 것은 충분히있을 수 있습니다.
그렇지 않으면 및 < "종료 날짜 플러스 일일"의 "시작 날짜"에> = 사용할 수 있습니다 :
"sales.Date >= '" + sdate + "' AND sales.Date < '" + edatePlusOne + "' "
-
==============================
2.이 형식의 날짜를 표현해야 할 것 같습니다 :
이 형식의 날짜를 표현해야 할 것 같습니다 :
선택 * 테이블의 경우 '2006-10-01'와 '2006년 11월 30일'사이하여 DateField
구글이 당신의 친구입니다 잊지 마세요, 여기 봐! :)
-
==============================
3.
Class.forName("com.mysql.jdbc.Driver"); connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospitall","root",""); PreparedStatement ps=connection.prepareStatement("select * from patient where patientid='"+txtpatientid.getText()+"'"); Statement stm=connection.createStatement(); ResultSet rs=ps.executeQuery(); if(rs.next()){ String patientid=txtpatientid.getText(); String str="select * from patient where patientid='"+patientid+"'"; ResultSet result=stm.executeQuery(str);
from https://stackoverflow.com/questions/19583806/searching-between-dates-in-sql-with-jdbc by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 JTable의에서 JCheckBox에 추가하는? (0) | 2020.06.15 |
---|---|
[SQL] 어떻게 VARBINARY (최대) 컬럼에 이미지를 저장? (0) | 2020.06.15 |
[SQL] 표에서 저장 프로 시저의 목록 (0) | 2020.06.15 |
[SQL] 어떻게 MySQL의 집계 기능을 결합? (0) | 2020.06.15 |
[SQL] 여기서 () 절 성능 내부에 가입하고? (0) | 2020.06.15 |