Date 无法格式化alter table中的默认日期

Date 无法格式化alter table中的默认日期,date,format,db2,locale,Date,Format,Db2,Locale,alter表中默认列的日期格式应类似于timestamp或遵循数据库服务器的区域设置。我想知道这个字符串表示是否可以格式化为其他类型。让我们假设: create table t1 (c2 int) 例如,这是因为它是ISO格式: alter table t1 add column c1 timestamp(12) default date('2014-11-13') 但是,以下句子应在美国地区执行,但在其他国家,这是一个无效日期,因为没有第13个月 alter table t1 add co

alter表中默认列的日期格式应类似于timestamp或遵循数据库服务器的区域设置。我想知道这个字符串表示是否可以格式化为其他类型。让我们假设:

create table t1 (c2 int)
例如,这是因为它是ISO格式:

alter table t1 add column c1 timestamp(12) default date('2014-11-13')
但是,以下句子应在美国地区执行,但在其他国家,这是一个无效日期,因为没有第13个月

alter table t1 add column c1 timestamp(12) default date('11/13/2014')
通过将format函数传递给alter column语句,这也是不可能的:

alter table t1 add column c1 timestamp(12) default
  date(timestamp_format('13/11/2014','DD/MM/YYYY'))
有没有办法自定义此字符串,以便独立于区域设置理解日期格式


在交付DDL为不同国家/地区的应用程序重新创建或应用修补程序时,这一点非常重要。

我不理解这个问题。日期存储在数据库中,没有格式。文字“2014-11-13”总是被解释为ISO日期YYYY-MM-DD。我不是说日期存储。我想问的是,如何使用与ISO和数据库语言环境不同的另一种日期格式指定默认列。为什么?你想解决什么问题?如果您在alter表格中手动输入,则由您自己决定是否知道已设置的区域设置。如果正在生成alter表,则应使用ISO格式生成该表,这样区域设置就不重要了。如果您不想担心语言环境,那么使用ISO。正如第一条注释中所述,该表不以任何外部格式存储日期。数据库中的“date”值看起来根本不像“date”。将格式指定为列属性毫无意义。只有当一个值显示在屏幕上或打印页面上,或者当用户键入一个输入值时,格式才起作用。它是运行应用程序的用户(或进程)的属性,而不是列的属性。因此,您不能更改该列,因为该列一开始没有格式。值得注意的是,在iSeries版本的DB2上,它存储了一个计数器达天(用于
DATE()
type)。访问此日期有问题。该算法有一个已知的错误:300年被认为是闰年(不是)。如果系统实际将其存储为格式化日期,这将是不可能的。一般来说,数据不应该格式化存储——这是显示端的问题。在处理(内部!)日期/时间/时间戳时,出于内部原因,始终使用ISO格式。