date - 从字符串中提取日期
问题描述
我有以下字符串:
CO_CAS_REA_NO_VIPPLUS_20190402_BONUS
如果可能,我想提取日期部分(20190402)并将其转换为 DD/MM/YY 格式。
我尝试了一些“搜索”和“提取”公式,但无济于事。
有人知道如何在 excel 或 VBA 中执行此操作吗?
数据字符串的其他变体如下:
COCASREAHVPLUSVIPUK20190827CRMFSDEP
COCASREALVWINFIDEGL20190809CRMPTS
COSBINFLVFIDE20190830CRMBET
CO_CAS_RET_HVMV_UK_20190830_RB
COSB_REA_181INF_HVMV_FIDE_20190809_CRM_RB
COSBREAHVMVGL20190831CRMFBFSQUAL
COSBINFLVNO20190816CRMFB
解决方案
假设在每个字符串中,您只有一个 8 位数字字符串YYYYMMDD
,以您要提取的形式表示日期,您可以使用以下三个公式之一来返回日期:
方法一:
=DATE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4),MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2),RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))
方法二:
=DATEVALUE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4)&"/"&MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2)&"/"&RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))
方法三:
=DATEVALUE(TEXT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),"0000-00-00"))
请注意,所有方法都使用数组公式,因此您必须在完成公式栏中的公式后按Ctrl+ Shift+ Enter,否则它们将无法正常工作。然后,您只需将公式向下拖动即可应用。
逻辑是先用这个数组公式
=MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0))
提取数字字符串。方法 1 和 2 遵循相同的逻辑,即从数字字符串中提取year YYYY
,month MM
和day DD
组件,然后使用DATE或DATEVALUE函数返回日期。方法 3 使用格式化技巧将数值快速转换为文本日期,然后使用DATEVALUE函数将文本日期转换为“真实”日期。
如果您有任何问题,请告诉我。干杯:)
推荐阅读
- jquery - Bootbox - Confirm Modal Dialog Box 需要回调函数……但我有一个
- android - ZXing中的摄像头找到二维码后如何重启
- avro - Apache Flume 中的 Apache Avro 模式验证
- php - 如何通过.htaccess“删除”或“忽略”查询字符串变量?(对于 WP Super Cache,W3 Total Cache 风格)
- react-native - 用 Jest 在 React Native 中测试 TextInput 的值变化
- xamarin.forms - Xamarin Forms - 如何使用 PushModalAsync 从右到左为模式设置动画?
- elasticsearch - 查询 ~10M 文档索引和更多问题时 fielddata=true 会有什么影响
- javascript - React Native 无法返回数组
- ruby - 我需要一个 cron 表达式
- laravel-5.2 - 使用带变量的控制器路由时出现问题