我似乎无法找到如何从列中的字符串中提取日期。 e.g:
2015-03-30T04:04:26+0200 -> 30.3.2015
我试图寻找正则表达式查询,但它对我不起作用。
答案 0 :(得分:0)
因为你在这里问SQL,怎么样:
SELECT DATE_FORMAT(DATE("2015-03-30T04:04:26+0200"),"%d.%m.%Y")
返回
30.03.2015
如果要在Oracle上运行此查询,则必须调整查询:
SELECT TO_CHAR(TO_DATE(SUBSTR('2015-03-30T04:04:26+0200', 1, 10),'YYYY-MM-DD'),'DD.MM.YYYY') myDate FROM dual
此处还有一些查询差异。实际上和Oracle完全一样。我在这里作弊并将最后的0200
移动到US
,这实际上是微秒,但是给了我们一个有效的解析格式字符串,而不必使用SUBSTR
:
SELECT TO_CHAR(TO_DATE('2015-03-30T04:04:26+0200','YYYY-MM-DD"T"HH24:MI:SS+US'),'DD.MM.YYYY')
现在这里有一个完全不同的功能。 SQLite使用strftime()
来格式化日期。但在这里我再次使用substr()
:
SELECT STRFTIME('%d.%m.%Y',DATE(SUBSTR('2015-03-30T04:04:26+0200',1,10)))
现在我可以继续使用MS SQL Server以及更多但我认为这些替代方案你应该找到一种将问题转换为DBMS SQL语法的方法。
或者如果你想使用普通的正则表达式:
(\d+)-(\d+)-(\d+)T.*
用代替的
\3.\2.\1
你可以在这里玩: RegEx Fiddle Demonstration
根据您的编程语言,您可能需要将RegEx更改为:
([0-9]+)-([0-9]+)-([0-9]+)T.*
和您的替换字符串
$3.$2.$1f
答案 1 :(得分:0)
以下内容适用于许多数据库:
select cast(left(col, 10) as date)