• Tricky but not impossible: this is just a proof of concept.

    With MyCTE (TheTime)

    AS

    (

    SELECT convert(datetime2,'1900-01-01 0:08:00.0000001') UNION ALL

    SELECT '1900-01-01 0:09:18.361' UNION ALL

    SELECT '1900-01-01 0:13:50.705'

    )

    SELECT

    *,

    CAST(f.q AS TIME(7))

    From myCTE a1

    CROSS JOIN myCTE a2

    CROSS APPLY (SELECT s_difference = DATEDIFF(second,a1.TheTime, a2.TheTime)) a

    CROSS APPLY (SELECT aTime = DATEADD(second,s_difference,a1.TheTime)) b

    CROSS APPLY (SELECT nsFraction = DATEDIFF(ns,aTime,a2.TheTime)) c

    CROSS APPLY (SELECT tt = DATEADD(second,s_difference,0)) d

    CROSS APPLY (SELECT t = CONVERT(VARCHAR(8),tt,108)) e

    CROSS APPLY (SELECT q = e.t + '.' + CAST(nsFraction AS VARCHAR)) f

    WHERE a1.TheTime < a2.TheTime

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden