【发布时间】:2012-11-02 04:19:22
【问题描述】:
我有一个表,我必须在其中执行 SELECT ... BETWEEN start_date AND end_date,并将 Date 值插入到同一个表中。
我读过类似的东西:
java.util.Date now = new java.util.Date();
pStmt.setDate( 1, new java.sql.Date( now.getTime() ) );
pStmt.setTimestamp( 2, new java.sql.Timestamp( now.getTime() ) );
pStmt.executeUpdate();
但是那种代码设置或获取当前日期,不是吗?我想自己插入和选择自定义日期。
我也在 StackOverflow 阅读了它:
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
AND ( MONTH(myfield) = '1')
是否也可以将Date 字段设为String,然后使用StringTokenizer 仅提取日、月或年信息,并在类似于此代码的SELECT 中使用它们? (以防我的第一个 - 也是更简单的 - 想法是不可能的。)
所以到目前为止,有两种可能的解决方案。我还需要知道哪个更快,因为访问的数据库位于具有大量数据的故障安全/关键系统(银行)中。
【问题讨论】:
-
自定义日期是什么意思?你能举一个你想要的具体例子吗(是你的数据库中的 start_date 和 end_date 时间戳)?
-
您的示例使用当前日期/时间。如果这就是你想要的,让 MySQL 为你做,例如
NOW()。如果没有,请告诉我们您所追求的日期范围。 -
还要注意
YEAR(myfield)是字段上的函数,mysql将无法使用索引快速获取数据。 -
它必须选择已经插入的日期,然后将要生成的表格填充到 PDF 中(我使用的是 iText)。我希望插入一个过去的日期,这样我的所有表格都将根据相同的示例。
-
关于第二个想法,我在想: SELECT * FROM table WHERE (YEAR(st_year)=?) AND (MONTH(st_month)=?) AND (DAY(st_day)=?) ;(...)etc(...) 字符串斜线、数据、st_year、st_month、st_day; StringTokenizer st = new StringTokenizer(斜线, "/");数据 = st.nextToken();天=数据; (...)等(...)