Sql 如何解析4个以上的位置

Sql 如何解析4个以上的位置,sql,Sql,我有一个有趣的例子,一段需要的数据实际上嵌入到一列数据中,看起来像这样: 请注意,这是一个仍然存在大量遗留混乱的商店 adlu201008270919_3.zip日期是我需要的,并且已嵌入 我在这里有这样做的代码: AND CAST(SUBSTRING(M.MDS_FILE,5,4) + '-' + SUBSTRING(M.MDS_FILE,9,2) + '-' + SUBSTRING(M.MDS_FILE,11,2) as datetime) 但现在我发现这里的“adlu”是4位,它

我有一个有趣的例子,一段需要的数据实际上嵌入到一列数据中,看起来像这样: 请注意,这是一个仍然存在大量遗留混乱的商店

adlu201008270919_3.zip日期是我需要的,并且已嵌入

我在这里有这样做的代码:

AND CAST(SUBSTRING(M.MDS_FILE,5,4) + '-' +  SUBSTRING(M.MDS_FILE,9,2) + '-' +   SUBSTRING(M.MDS_FILE,11,2)  as datetime)
但现在我发现这里的“adlu”是4位,它可以是3、2或1。 因此,我必须为此编写代码,我得出了以下结论:但它不是编译:

AND CASE WHEN          WHEN CAST(SUBSTRING(M.MDS_FILE,5,4) + '-' +  SUBSTRING(M.MDS_FILE,9,2) + '-' +   SUBSTRING(M.MDS_FILE,11,2)  as datetime) 
ELSE WHEN OEN.LENGTH(S.FACILITY_KEY) = 3 THEN CAST(SUBSTRING(M.MDS_FILE,4,4) + '-' +  SUBSTRING(M.MDS_FILE,8,2) + '-' +   SUBSTRING(M.MDS_FILE,10,2)  as datetime)
ELSE WHEN OEN.LENGTH(S.FACILITY_KEY) = 2 THEN CAST(SUBSTRING(M.MDS_FILE,3,4) + '-' +  SUBSTRING(M.MDS_FILE,7,2) + '-' +   SUBSTRING(M.MDS_FILE,9,2)  as datetime)
ELSE CAST(SUBSTRING(M.MDS_FILE,2,4) + '-' +  SUBSTRING(M.MDS_FILE,6,2) + '-' +   SUBSTRING(M.MDS_FILE,8,2)  as datetime) END

案例
需要评估。您的第一条语句只是说
WHEN(一系列转换)
,但从来没有计算(
=,
等)


我假设您希望它是
且当OEN.LENGTH(s.FACILITY_KEY)=4时为CASE,那么…

而不是基于
s.FACILITY_KEY
CASE
语句,我将使用
PATINDEX
动态查找您要查找的日期字符串的起始位置:

DECLARE 
    @TestValue1 VARCHAR(50),
    @TestValue2 VARCHAR(50),
    @TestValue3 VARCHAR(50),
    @TestValue4 VARCHAR(50)

SET @TestValue1 = 'adlu201008270919_3.zip'
SET @TestValue2 = 'adl201008270919_3.zip'
SET @TestValue3 = 'ad201008270919_3.zip'
SET @TestValue4 = 'a201008270919_3.zip'

SELECT CAST(SUBSTRING(@TestValue1, PATINDEX('%[1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', @TestValue1), 8) AS DATETIME)
SELECT CAST(SUBSTRING(@TestValue2, PATINDEX('%[1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', @TestValue2), 8) AS DATETIME)
SELECT CAST(SUBSTRING(@TestValue3, PATINDEX('%[1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', @TestValue3), 8) AS DATETIME)
SELECT CAST(SUBSTRING(@TestValue4, PATINDEX('%[1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', @TestValue4), 8) AS DATETIME)