我正在学习oracle 11g。我需要创建以下列示例格式存储Year和Month的列:
我看到的日期时间数据类型只占整个日期。还有数字类型可能允许无效的年份和月份。但我希望他们在给定的形式,同时避免无效的月份和年份。请告诉我如何解决它。谢谢
更新:这样的输入可以吗?
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) {
}
}
}
答案 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
希望这会有所帮助..