首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Patindex提取日期,M/D/YY或MM/DD/YY

Patindex提取日期,M/D/YY或MM/DD/YY
EN

Stack Overflow用户
提问于 2020-09-18 01:27:40
回答 1查看 77关注 0票数 0

我使用以下代码从字符串中提取日期并将其保存到临时表中:

我需要patindex是灵活的提取2位数的日期和2位数的月份以及。下面的例子只有一个数字的月份。

代码语言:javascript
复制
DECLARE @Stringval VARCHAR(500);
DECLARE @Dateval DATETIME;

 DECLARE @DATETIME_TBL TABLE
 (
    datetime_val DATETIME 
 )


SET @Stringval = 'Cairo Egypt - 1-15-10 System 1..' 

IF ISDATE(SUBSTRING(@Stringval, patindex('%[0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @Stringval), 8)) = 1
BEGIN
  INSERT INTO @DATETIME_TBL
  VALUES (CONVERT(DATETIME, SUBSTRING(@Stringval, patindex('%[0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @Stringval), 8)))
END

Select * from @DateTIME_TBL

我知道对于1-15-10,它可能只需要一个0-9,但无论如何,我们可以灵活地在一个patindex中包含两位数的月份和两位数的日期

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 02:59:36

下面是一些在这两种情况下都有效的代码。将这两个条件合并到一个insert语句中会让我感到紧张。从逻辑上讲,创建两条insert语句(但仅在必要时通过在第一次尝试插入后检查@@rowcount来运行这两条语句)更具自我文档化和可靠性。

变量和临时表

代码语言:javascript
复制
declare @stringval varchar(500)='Cairo Egypt - 1-15-10 System 1..';

declare @stringval_tbl table(
    string_val  varchar(500));

insert @stringval_tbl select @stringval;

declare @datetime_tbl table (
    datetime_val datetime);

Insert语句

代码语言:javascript
复制
insert @datetime_tbl
select convert(datetime, substring(st.string_val, ndx.loc+1, 7))
from @Stringval_tbl st
      cross apply
      (select patindex('% [0-9]-[0-9][0-9]-[0-9][0-9]%', @Stringval) loc) ndx
where ndx.loc>0
      and isdate(substring(st.string_val, ndx.loc, 7))=1;
if @@rowcount=0
    insert @DATETIME_TBL
    select convert(datetime, substring(st.string_val, ndx.loc, 8))
    from @Stringval_tbl st
          cross apply
          (select patindex('%[0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @Stringval) loc) ndx
    where ndx.loc>0
          and isdate(substring(st.string_val, ndx.loc, 8))=1;

输出(when @stringval=‘开罗埃及- 1-15-10系统1..')

代码语言:javascript
复制
datetime_val
2010-01-15 00:00:00.000

Output (when @stringval=‘开罗埃及- 11-15-10系统1..')

代码语言:javascript
复制
datetime_val
2010-11-15 00:00:00.000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63943287

复制
相关文章

相似问题

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