我在SQL中存储了以下字符串:
John Doe批准的申请-MDat30 / 01/2018 10:54:31
使用以下T-SQL函数:
convert (datetime, substring(MD_SIGNATURE, charindex('/', MD_SIGNATURE,0)-2, 10),105) as MD_SIGN_DATE
这将输出以下内容:
2018-01-30 00:00:00.000
我需要帮助来获取整个时间戳,包括像这样的秒部分:
2018-01-30 10:54:31
谢谢。
答案 0 :(得分:2)
最简单的方法是使用RIGHT
(基于我们拥有的 1 示例)。假设格式始终为dd/MM/yyyy hh:mm:ss
,日期始终为字符串的最后一部分,则:
DECLARE @s varchar(100) = 'Application approved by John Doe - MDat30/01/2018 10:54:31';
SELECT CONVERT(datetime2(0),RIGHT(@s,19),103);
答案 1 :(得分:2)
如果知道模式,则可以使用PATINDEX
:
SELECT
str,
CONVERT(DATETIME, SUBSTRING(str, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]%', str), 19), 103) AS dt
FROM (VALUES
('Application approved by John Doe - MDat30/01/2018 10:54:31 Kitchen Sink')
) tests(str)
如果找不到日期(提示:NULLIF
),可以对以上示例进行调整以返回null。结果:
| str | dt |
|-------------------------------------------------------------------------|-------------------------|
| Application approved by John Doe - MDat30/01/2018 10:54:31 Kitchen Sink | 2018-01-30 10:54:31.000 |
答案 2 :(得分:0)
如果ORA-01821: date format not recognized
的最终参数长于字符串的其余部分,则将返回整个剩余的字符串。因此,只需更改您的最后一个参数即可。
SUBSTRING
在那里,你会
答案 3 :(得分:0)
对@larnu代码的轻微修改。
我使用了substring()而不是right()。因为如果date是结尾,可以使用Right()。但是子字符串可以提取日期,而不管位置如何。
__icontains