如何选择字符串中连字符后的前8个字符?

时间:2018-12-10 16:45:18

标签: sql postgresql

我使用的是Postgres SQL Server,其中在表中我有一列的值看起来像这样:

enter image description here

我想编写一个查询,该查询仅输出连字符后的前8个字符,这只是不带连字符的日期。我想要的输出将是“ 20181206”的形式,但也很想知道如何将其重新格式化为连字符格式!

4 个答案:

答案 0 :(得分:2)

结合使用positionsubstring函数。

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

要以连字符格式重新设置格式,请在to_char将子字符串更改为cast后使用date。(假设子字符串是有效日期)

to_char(substring(val,position('-' in val)+1,8)::date,'yyyy-MM-dd')

答案 1 :(得分:1)

使用正则表达式:

select regexp_replace(val, '.*-(....)(..)(..).*', '\1-\2-\3') from 
  (select '2342-20181206000000' AS val) x;
+----------------+
| regexp_replace |
+----------------+
| 2018-12-06     |
+----------------+
(1 row)

答案 2 :(得分:0)

这将起作用:

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

检查:http://sqlfiddle.com/#!15/9bab3/3/0

答案 3 :(得分:0)

不一定称它为更漂亮,但是,它可以工作:

select (regexp_match('2342-20181206000000', '^\d+-(\d{8})'))[1]::date as "Date";