Как выбрать первые 8 символов после дефиса в строке? - PullRequest
0 голосов
/ 10 декабря 2018

Я использую SQL-сервер postgres, где в таблице есть столбец, значения которого выглядят следующим образом:

enter image description here

Я хочунапишите запрос, который будет выводить только первые 8 символов после дефиса, который является просто датой без дефисов.Вывод, который я хочу получить, будет в форме «20181206», но также хотелось бы знать, как переформатировать это в формат дефиса!

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

будет не обязательно назвать его более красивым, , но , и это будет работать:

select (regexp_match('2342-20181206000000', '^\d+-(\d{8})'))[1]::date as "Date";
0 голосов
/ 10 декабря 2018

С регулярным выражением:

select regexp_replace(val, '.*-(....)(..)(..).*', '\1-\2-\3') from 
  (select '2342-20181206000000' AS val) x;
+----------------+
| regexp_replace |
+----------------+
| 2018-12-06     |
+----------------+
(1 row)
0 голосов
/ 10 декабря 2018

это будет работать:

select substring(colname from (strpos(colname, '-')+1) for 8)  from Table1 ;

проверка: http://sqlfiddle.com/#!15/9bab3/3/0

0 голосов
/ 10 декабря 2018

С комбинацией функций position и substring.

substring(val,position('-' in val)+1,8)

Для переформатирования в формате дефиса используйте to_char, после cast перевод подстроки в date. (Предполагается, что подстрока является действительной датой)

to_char(substring(val,position('-' in val)+1,8)::date,'yyyy-MM-dd')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...