如何在SQLite上从MM/DD/YY格式中分离年份



我有一个日期格式为MM/DD/YY的表,但它也可以像M/D/YY、MM/D/YY或M/DD/YY,所以我不能使用子字符串,因为字符串的长度发生了变化。。

例如1/2/98、10/5/12或12/2/10等。由于SQlite没有任何to_date函数,我也不能使用它。

桌子是这样的;

+-------+----------+
| NAME  |   DATE   |
+-------+----------+
| John  | 12/1/04  |
| Megan | 4/11/85  |
| Doe   | 9/18/17  |
| Smith | 10/27/10 |
+-------+----------+

预期的产出是这样的;

+-------+------+
| NAME  | DATE |
+-------+------+
| John  |   04 |
| Megan |   85 |
| Doe   |   17 |
| Smith |   10 |
+-------+------+

我不知道怎么做,但如果疯狂的编码器能像一样

+-------+------+
| NAME  | DATE |
+-------+------+
| John  | 2004 |
| Megan | 1985 |
| Doe   | 2017 |
| Smith | 2010 |
+-------+------+

那太棒了。可能的限制是任何<20是2000年代,>20是1900年代的

您可以使用字符串函数。

这将为您提供第一个结果集:

select name, substr(date, -2) date from mytable

第二个resulset需要一些条件逻辑:

select 
name, 
1900 + substr(date, -2) + 100 * (0 + substr(date, -2) <= 20) date
from mytable

使用case语句可能更容易理解:

select 
name, 
case when 0 + substr(date, -2) <= 20 
then 2000 + substr(date, -2) 
else 1900 + substr(date, -2) 
end date
from mytable

DB Fiddle上的演示

名称|日期:----|----:约翰|2004梅根| 1985Doe | 2017Smith | 2010

最新更新