Sql 如何解析4个以上的位置
我有一个有趣的例子,一段需要的数据实际上嵌入到一列数据中,看起来像这样: 请注意,这是一个仍然存在大量遗留混乱的商店 adlu201008270919_3.zip日期是我需要的,并且已嵌入 我在这里有这样做的代码: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位,它
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)