我在 MySQL 服务器数据库中有一张表,其中有一列。在那一栏中我有价值观。我想以日期格式从该列中提取 Created_Date 。
该栏下的值是这样的:
'Created_Date: Fri Feb 23 2024 14:37:18 GMT+0000 (Coordinated Universal Time), Message: ghiwns binjbe snbu'
因此,我编写了可以提取 Created_Date 的代码。但我无法将其转换为日期格式。
代码:
select
created_date,
case
when upper(created_date) like '%Created_Date%'
then trim(SUBSTRING(created_date, CHARINDEX(':', created_date, CHARINDEX('Created_Date', upper(created_date), 0)) + 1,
CHARINDEX(',', created_date, CHARINDEX(':', created_date, CHARINDEX('Created_Date', upper(created_date), 0))) - CHARINDEX(':', created_date, CHARINDEX('Created_Date', upper(created_date), 0)) - 1))
else ''
end Created_Date
from
table
如何将其转换为日期格式?
例如我有
"Created_Date: Fri Feb 23 2024 14:37:18 GMT+0000 (Coordinated Universal Time)"
我想要这个:2024 年 2 月 23 日。
我怎样才能实现它?我该如何编写 SQL 查询?
你可以这样做:
SELECT TRY_CONVERT(DATETIME, finishValue, 100) AS dateValue
, *
FROM (
VALUES ('Some other text... Created_Date: Fri Feb 23 2024 14:37:18 GMT+0000 (Coordinated Universal Time)')
, ('Banana')
, ('Created_Date: Fri Mar 1 1981')
, ('Init text Created_Date: mon Apr 1 1981 some other text')
, ('Bad date Created_Date: Fri Mar 99 1981')
, ('Bad string Created_Date: ')
, ('Bad string#2 Created_Date: 19000101')
) x (textcolumn)
CROSS APPLY (
SELECT STUFF(textcolumn, 1, NULLIF(charindex('Created_Date: ', x.textcolumn), 0) + len('Created_Date:') + 4, '') AS startValue
) s
CROSS APPLY (
SELECT LEFT(startvalue, NULLIF(CHARINDEX(' ', startvalue + ' ', 8 /*assume long enough string*/), 0) - 1) AS finishValue
) e
首先,找到 Created_date: 事件并将其从字符串以及字符串的“day”部分中删除:(星期五)使用
STUFF
。
然后你就剩下:
Feb 23 2024 14:37:18 ...
。然后从第 8 个字符 CHARINDEX(' ', startvalue + ' ', 8)
中找到空格,这应该为您提供 2024 年和时间部分之间的空格。
最后,尝试使用样式100将
Feb 23 2024
转换为日期时间。如果失败,则返回NULL。