SQL Server 将日期时间列(当前类型为nvarchar)转换为SQL中用户定义的日期时间格式

brgchamk  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(188)

在我的SQL Server数据库表中,我有一个nvarchar列,其值为“Thursday,29 - September - 2022,11:44 pm”。
我想将其转换为“DD/MM/YY”格式:

SELECT FORMAT ('Thursday, 29 - September - 2022, 11:44 pm', 'dd/MM/yy') AS date

我希望得到DD/MM/YY的结果,但是没有得到正确的输出。

k5ifujac

k5ifujac1#

你必须先使用子字符串提取dd mmm和yyyy,然后你可以附加它们,以便能够转换为日期类型106。在你有了日期对象之后,你可以得到任何想要的格式。
尝试以下操作:

select CONVERT(varchar, CONVERT(DATETIME, 
               
               Substring(str, CHARINDEX(', ', str)+2, 2) + ' ' +  
               Substring(
  left(str, len(str) - CHARINDEX('-', reverse(str)) - 1), CHARINDEX('-', str) + 2, 
  len(left(str, len(str) - CHARINDEX('-', reverse(str)) - 1)) - CHARINDEX('-', str))
               + ' ' +
               Substring(str, len(str) - CHARINDEX('-', reverse(str)) + 3, 4)
               , 106), 3) 
  from (values ('Sun, 25 - May - 2022, 05:00 pm')) v(str)

创建了一个小提琴演示:https://dbfiddle.uk/apcal_Ca

vshtjzan

vshtjzan2#

您可以将字符串中的数据固定为有效日期,然后使用 * convert * 函数的适当样式:

declare @d varchar(50) = 'Thursday, 29 - September - 2022, 11:44 pm';

select Convert(char(8), Cast(translate(Stuff(@d, 1, PatIndex('% %', @d), ''), '-,', '  ') as date), 3);

演示DB Fiddle

相关问题