1

我需要获得介于 !03 和 !03 之间的值。

例子:

JDC!0320151104!03OUT 

我应该得到以下字符串作为回报:20151104

注意:字符串并不总是 22 个字符长,但我只关心介于 !03 和 !03 之间的值。

这就是我到目前为止所拥有的。我无法取得比这更进一步的进展:

SELECT 
SUBSTRING(
RegStatsID, 
CHARINDEX('!', RegStatsID) + 3, 
CHARINDEX('!', REVERSE(RegStatsID))
)
 From TableX
4

2 回答 2

1

太好了,您找到了解决方案!

这可能会更好:

通过用 XML 标记替换“!03”,您可以轻松选择第二个“节点”。您的字符串将转换为<x>JDC</x><x>20151104</x><x>OUT</x>

DECLARE @test VARCHAR(100)='JDC!0320151104!03OUT';

SELECT CAST('<x>' + REPLACE(@test,'!03','</x><x>') + '</x>' AS XML).value('/x[2]','datetime')

一个优点是获得两个键入的“!03”之间的值。在这种情况下,您无需任何进一步的转换即可获得“真实”的日期时间。如果值在所有情况下都没有日期时间(或日期),则只需nvarchar(max)用作类型。

另一个优点是:如果您 - 为什么会 - 以后需要其他值,您只需将它们与.value('/x[1 or 3]'...)

于 2016-05-10T21:09:13.463 回答
0

通过执行以下操作,我能够做到这一点:

SELECT 
 SUBSTRING(
    RegStatsID, 
    CHARINDEX('!', RegStatsID) + 3, 
    len(RegStatsID) - CHARINDEX('!', RegStatsID ) - 2 -  CHARINDEX('!', Reverse(RegStatsID))
)
于 2016-05-10T21:01:24.683 回答