我有一个日期格式为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