как отделить год от формата MM / DD / YY на SQLite - PullRequest
1 голос
/ 03 мая 2020

У меня есть таблица с датами, форматированными как MM / DD / YY, но она также может быть как M / D / YY или MM / D / YY или M / DD / YY, поэтому я не могу использовать substr, так как длина строки изменения ..

Например 1/2/98 или 10/5/12 или 12/2/10 et c. и др c. Поскольку у 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

1 Ответ

3 голосов
/ 03 мая 2020

Вы можете использовать строковые функции.

Это дает вам первый набор результатов:

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

Второй результат требует небольшой условной логики c:

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

Демонстрация по БД Fiddle :

name  | date
:---- | ---:
John  | 2004
Megan | 1985
Doe   | 2017
Smith | 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...