在Oracle中存储数字年份输入和数字月份的数据类型是否正确?

时间:2015-12-26 08:12:10

标签: oracle oracle11g

我正在学习oracle 11g。我需要创建以下列示例格式存储Year和Month的列:

  • 年份:2015
  • 月:6

我看到的日期时间数据类型只占整个日期。还有数字类型可能允许无效的年份和月份。但我希望他们在给定的形式,同时避免无效的月份和年份。请告诉我如何解决它。谢谢

更新:这样的输入可以吗?

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

class CenteredColumn {

 public static void main(String[] args) {
  try {

   Workbook wb = new XSSFWorkbook();

   Sheet sheet = wb.createSheet("Sheet1");

   CellStyle cellStyle = wb.createCellStyle();
   cellStyle.setAlignment(CellStyle.ALIGN_CENTER);

   sheet.setDefaultColumnStyle(1, cellStyle);

   //Workaround 1: We set setApplyAlignment(true) into the `xf` element's tag in styles.xml.
   //This causes Excel applying alignments from this style to new cells in that column.
   for (int i = 0; i < ((XSSFWorkbook)wb).getStylesSource().getNumCellStyles(); i++) {
    if (((XSSFWorkbook)wb).getStylesSource().getStyleAt(i).equals(cellStyle)) {
     ((XSSFWorkbook)wb).getStylesSource().getCellXfAt(i).setApplyAlignment(true);
    }
   }

   Row row = sheet.getRow(0);
   if (row == null) row = sheet.createRow(0);

   Cell cell = row.getCell(1);
   if (cell == null) cell = row.createCell(1);
   cell.setCellValue("name");
   //Workaround 2: We set the cellStyle to the new cell because POI will not do this itself.
   cell.setCellStyle(cellStyle);

   FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");
   wb.write(fileOut);

  } catch (IOException ioex) {
  }
 }
}

2 个答案:

答案 0 :(得分:3)

最佳解决方案是将日期存储在DATE列中。 Oracle有一些非常简洁的日期函数,您可以轻松地将本月的第一天存储在一个DATE列中。否则,您会发现自己经常从其他日期提取元素,或者使用TO_CHAR()TO_DATE()来调整您的代码。 Find out more

但是,如果您有严格的要求,则可以使用强类型和检查约束来避免无效月份:

CREATE TABLE FOOBAR (
      YYYY number(4,0) not null
      , MM number(2,0) not null
      , constraint foobar_yyyy_ck check (yyyy != 0)
      , constraint foobar_mm_ck check (mm between 1 and 12)
      );

这不会做你想要的,因为它会默认缺少的元素:

CREATE TABLE FOOBAR (YYYY DATE, MM DATE);

我们无法在DATE列中存储一年或一个月。

答案 1 :(得分:2)

使用DATE数据类型..

当对数据库执行插入操作时..使用

TO_DATE ('November 13, 1992', 'MONTH DD, YYYY')

对于日期的输入和输出,标准Oracle日期格式为DD-MON-YY,如下所示:

'13-NOV-92'

执行插入操作/查询,如下所示:

INSERT INTO table_name (name, created_at) VALUES ('ANDY', TO_DATE ('November 13, 1992', 'MONTH DD, YYYY'));

以下是该指南的链接: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i1847

如果您想在数据库中单独存储月份和年份,可以使用NUMBER&amp; NUMBER(n) https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i22289

希望这会有所帮助..