• squvi.87 (9/24/2015)


    what we could do to get the expected output?

    Assuming that your string date is in 'yyyymmdd' format then you could do:

    SELECTTestDate,

    ISDATE(TestDate) AS [IsDate?],

    CASE WHEN TestDate LIKE '[12][0-9][0-9][0-9][01][0-9][0-3][0-9]'

    THEN 'RegExOK' ELSE 'RegExBad' END,

    CASE WHEN TestDate LIKE '[12][0-9][0-9][0-9][01][0-9][0-3][0-9]'

    AND IsDate(TestDate) = 1

    THEN 'Valid' ELSE 'Invalid' END

    FROM

    (

    SELECT'2000' AS [TestDate]-- Valid year of IsDate() but fails RegEx

    UNION ALL SELECT '20001231'-- Valid

    UNION ALL SELECT '20000231'-- Passes reges, Feb. does not have 31 days!

    UNION ALL SELECT '20009999'-- Fails regex

    ) AS X

    TestDate IsDate?

    -------- ----------- -------- -------

    2000 1 RegExBad Invalid

    20001231 1 RegExOK Valid

    20000231 0 RegExOK Invalid

    20009999 0 RegExBad Invalid