如何在TSQL函数中删除“_”前面的值并在一行中显示日期和时间?
以下是示例:
Declare @inputstring as varchar(50) = 'Studio9_20230126_203052' ;
select value from STRING_SPLIT( @inputstring ,'_')
所需输出:2023-01-26 20:30:52.000
如何在TSQL函数中删除“_”前面的值并在一行中显示日期和时间?
以下是示例:
Declare @inputstring as varchar(50) = 'Studio9_20230126_203052' ;
select value from STRING_SPLIT( @inputstring ,'_')
所需输出:2023-01-26 20:30:52.000
3条答案
按热度按时间jv2fixgn1#
如果我们可以 * 安全地 * 假设值的格式总是
{Some String}_{yyyyMMdd}_{hhmmss}
,那么您可以使用STUFF
几次,首先删除前导字符串直到第一个下划线(_
)字符(使用CHARINDEX
来查找该字符),然后注射2个结肠(:
)个字符。最后,您可以使用空格REPLACE
剩余下划线(``),然后使用TRY_CONVERT
尝试将该值转换为datetime2(0)
。请注意,这 * 并没有 * 给予您在问题中所需的值(
2023-01-26 20:05:52.000
),但我假设这是一个印刷错误,表示分钟的05
应该是30
。rnmwe5a22#
创建函数
选择查询
产出
fnvucqvd3#
这将允许“somestring_YYYYMMDD_HHMISS”格式的“somestring”长度可变。
输出如下所示,最后得到的是DATETIME数据类型。注解掉返回值中不希望的列。x1c 0d1x
我将把它转换成一个iTVF(内联表值函数),让您从中获得一些乐趣。请记住,任何包含“开始”的函数最终都会成为性能问题的一部分,因此请确保它是iTVF:D
编辑:污垢...我必须记住向下滚动。@拉穆已经发布了同样的东西,但它可能更好,更快,如果你只是想要的时间,而不是我包括的标识符。