首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析4个以上的位置

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

Stack Overflow用户
提问于 2011-11-11 03:36:47
回答 2查看 63关注 0票数 1

我有一个有趣的例子,其中所需的一段数据实际上嵌入在一列数据中,看起来像这样:请注意,这是一个具有强大遗留混乱的商店。

adlu201008270919_3.zip日期是我需要的,并且是内嵌的。

我在这里有做这件事的代码:

代码语言:javascript
复制
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。所以我不得不编写代码,因为我想出了这个:但它没有编译:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-11 03:46:27

CASE需要评估。您的第一个语句只说了WHEN(a bunch of conversions),但从来没有求值(=, <, >等)。

我假设你想要的是AND CASE WHEN OEN.LENGTH(s.FACILITY_KEY) = 4 THEN ...

票数 1
EN

Stack Overflow用户

发布于 2011-11-11 03:52:42

我不会使用基于S.FACILITY_KEYCASE语句,而是使用PATINDEX动态查找要查找的日期字符串的起始位置:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8085278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档