Sql 我是否可以在Oracle 11g中仅将日期的月份和年份部分存储到日期列中?

Sql 我是否可以在Oracle 11g中仅将日期的月份和年份部分存储到日期列中?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,请不要将此混淆为从已存储的日期值中选择月份和年份。我只需要存储月份和年份,并将其检索为。列数据类型必须是DATE,而不是VARCHAR。ADATE数据类型在内部存储为日、小时、分钟和秒组件。因此,如果您使用的是DATE数据类型,则必须始终存储这些值 但是,您可以使用TRUNC(date\u value,'MM')将日期截断为每月的第一天,并将其添加到表上的检查约束中,以确保日期/时间组件始终为固定值(01 00:00:00): DATE数据类型在内部存储为日、时、分和秒组件。因此,如果您使用的是

请不要将此混淆为从已存储的日期值中选择月份和年份。我只需要存储月份和年份,并将其检索为。列数据类型必须是DATE,而不是VARCHAR。

A
DATE
数据类型在内部存储为日、小时、分钟和秒组件。因此,如果您使用的是
DATE
数据类型,则必须始终存储这些值

但是,您可以使用
TRUNC(date\u value,'MM')
将日期截断为每月的第一天,并将其添加到表上的检查约束中,以确保日期/时间组件始终为固定值(
01 00:00:00
):


DATE
数据类型在内部存储为日、时、分和秒组件。因此,如果您使用的是
DATE
数据类型,则必须始终存储这些值

但是,您可以使用
TRUNC(date\u value,'MM')
将日期截断为每月的第一天,并将其添加到表上的检查约束中,以确保日期/时间组件始终为固定值(
01 00:00:00
):


不,在oracle 11g中,您不能只将日期的月份和年份部分存储到日期列中

看这个


不,在oracle 11g中,您不能只将日期的月份和年份部分存储到日期列中

看这个


在每月的第一天存储午夜有什么问题吗?如果必须使用
日期
数据类型,也许可以使用约定,即日期值的日期必须始终是某个数字,例如1和00:00的时间。-@亚历克斯普尔,你太快了!绝对同意@Alex Pole的上述评论!此外,如果我可以补充的话,他可以存储一个月和一年中的任何一天,只要他知道此列将用于此目的。然后,也可以在一个虚拟列中进行“转换”,例如从中提取月份或年份,该虚拟列计算所有这些。即便如此,我也不认为在
日期
列中只存储月份或年份(而不是
VARCHAR2
)有什么意义,除了重新定义实际的
日期
数据类型或使用自定义类型或其他..答案是。。。不是。。。。它必须是存储在日期列中的日期。由于这是一个vslid日期,所以它可以是本月的第一天到00:00:00。感谢您的回复。我想知道这是否有可能。看起来答案是否定的。在月的第一天存储午夜有什么问题吗?如果必须使用
日期
数据类型,也许可以使用约定,即日期值的日期必须始终是某个数字,例如1和00:00的时间。-@亚历克斯普尔,你太快了!绝对同意@Alex Pole的上述评论!此外,如果我可以补充的话,他可以存储一个月和一年中的任何一天,只要他知道此列将用于此目的。然后,也可以在一个虚拟列中进行“转换”,例如从中提取月份或年份,该虚拟列计算所有这些。即便如此,我也不认为在
日期
列中只存储月份或年份(而不是
VARCHAR2
)有什么意义,除了重新定义实际的
日期
数据类型或使用自定义类型或其他..答案是。。。不是。。。。它必须是存储在日期列中的日期。由于这是一个vslid日期,所以它可以是本月的第一天到00:00:00。感谢您的回复。我想知道这是否有可能。看起来答案是否定的。没错,日期是“日期”,日期/月份只是该“日期”的表示形式,因此,例如,昨天是“日期”,可以存储在“日期”列中,然后以您想要的方式检索(从更技术的角度看,日期存储为从第1年或第0年开始的秒或毫秒)这实际上是一个只有链接的答案。你最好在回答中引用链接文章的要点。的确,日期是“日期”,日期/月份只是该“日期”的表示形式,因此,例如,昨天是“日期”,可以存储在“日期”列中,然后按你想要的方式检索(从更技术的角度来看,日期从第1年或第0年起存储为秒或毫秒)这实际上是一个仅链接的答案。您最好在答案中引用链接文章的要点。@ErsinGülbahar a
DATE
将始终有一个日期和时间部分-您只需忽略它们或确保它们是一个固定值(可以通过列上的检查约束来完成)但问题不是,@ErsinGülbahar OP声明“列数据类型必须是
DATE
”-一个
DATE
数据类型总是有一个日期和时间组件,因此满足他们使用
DATE
类型要求的唯一方法是存储日期/时间并忽略它,或者存储一个固定的日期/时间值,然后选择哪个选项,然后构建一种机制将未使用的组件忽略到关联的业务日志中ic.截断为固定日期/时间值的日期更简单,因为它允许日期比较将同一月份的值视为相等。@ErsinGülbahar A
date
将始终有一个日期和时间组件-您只需忽略它们或确保它们是固定值(可以通过列上的检查约束来完成)但问题不是,@ErsinGülbahar OP声明“列数据类型必须是
DATE
”-一个
DATE
数据类型总是有一个日期和时间组件,因此满足他们使用
DATE
类型要求的唯一方法是存储日期/时间并忽略它,或者存储一个固定的日期/时间值,然后选择哪个选项,然后构建一种机制将未使用的组件忽略到关联的业务日志中ic.截断为固定日期/时间值的日期更简单,因为它允许进行日期比较
CREATE TABLE your_table (
  date_column DATE
              CONSTRAINT your_table__date_column__chk
                CHECK ( date_column = TRUNC( date_column, 'MM' ) )
);

INSERT INTO your_table ( date_column )
VALUES ( TRUNC( SYSDATE, 'MM' ) );