我使用的是Postgres SQL Server,其中在表中我有一列的值看起来像这样:
我想编写一个查询,该查询仅输出连字符后的前8个字符,这只是不带连字符的日期。我想要的输出将是“ 20181206”的形式,但也很想知道如何将其重新格式化为连字符格式!
答案 0 :(得分:2)
结合使用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')
答案 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 ;
答案 3 :(得分:0)
不一定称它为更漂亮,但是,它可以工作:
select (regexp_match('2342-20181206000000', '^\d+-(\d{8})'))[1]::date as "Date";