Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将日期从YY转换为YYYY——编译器/解释器如何知道使用正确的世纪?_Sql_Date_Datetime_Date Conversion_2 Digit Year - Fatal编程技术网

Sql 将日期从YY转换为YYYY——编译器/解释器如何知道使用正确的世纪?

Sql 将日期从YY转换为YYYY——编译器/解释器如何知道使用正确的世纪?,sql,date,datetime,date-conversion,2-digit-year,Sql,Date,Datetime,Date Conversion,2 Digit Year,我只是在导入一个旧数据库,当我看着结果滚动时,我想知道,它如何/为什么知道将2013年12月31日转换为2013年12月31日,而将1999年12月31日转换为1999年12月31日?(“在本例中它”是Python的strftime(%Y/%m/%d)函数) 2050年会发生什么?50年12月31日的记录会默认解释为2050年、1950年或2150年吗 我意识到它可能因语言而异,可能有一些旗帜/选项专门强制使用某个世纪。但是如果您没有明确地这样做,那么默认情况下是什么在进行判断调用呢?您必须阅读

我只是在导入一个旧数据库,当我看着结果滚动时,我想知道,它如何/为什么知道将2013年12月31日转换为2013年12月31日,而将1999年12月31日转换为1999年12月31日?(“在本例中它”是Python的strftime(%Y/%m/%d)函数)

2050年会发生什么?50年12月31日的记录会默认解释为2050年、1950年或2150年吗


我意识到它可能因语言而异,可能有一些旗帜/选项专门强制使用某个世纪。但是如果您没有明确地这样做,那么默认情况下是什么在进行判断调用呢?

您必须阅读编译器文档


更重要的是:尽可能不要使用两位数的年份

它因数据库而异,每个数据库都有一个默认的时间跨度

SQL Server的默认时间跨度为:
1950-2049
,因此
50
变为
1950
,而
49
变为
2049

在MySQL和Oracle中是
1970-2069

在Postgresql中,它的中心是
2020
,因此最接近2020年的年份似乎也是
1970-2069

所有的默认值都会延续到将来,因此定制标准经常是必要的

两位数年份可能会混淆,取
2010-05-07
并将其更改为两位数年份,
10-05-07
?不,至少在SQL Server中应为
05-07-10

SELECT CAST('2010-05-07' AS DATE)  --  2010-05-07
      ,CAST('10-05-07' AS DATE)    --  2007-10-05
      ,CAST('05-07-10' AS DATE)    --  2010-05-07

无效日期通常可以轻松确定提供的日期格式。

大多数语言/dbms都有默认值,但允许将世纪间隔设置为自定义值


您应该检查文档是否/如何做到这一点。

每种语言/数据库都记录了其日期转换规则。ISO日期格式不再支持两个字符的年份格式。另一个选项是尝试2位数的年份范围,并查看数据库将它们分配给哪个4位数的年份。