如何使用带有文本,日期,文本模式的SQL在MS-ACCESS中拆分一串文本?

问题描述 投票:-2回答:1

在MS-Access数据库中,我在一列中包含多个状态的文本,并希望将它们分为状态和日期。 “XX - 月份日,文本,XX - 文本文本 - ......”是一致的模式。

数字XX是状态标识符,可以是任意两个数字。 “文本文本”可以是可变长度,但在指示日期之前始终包含单词“on”。 (不在发布的图像中但在数据库中)日期值为3个字母的月2位数字日和4位年份格式(例如2012年10月1日)。可以有不同数量的状态,但最多15个。

Example

sql string ms-access split
1个回答
0
投票

非常怀疑这可以单独使用SQL来完成。解析字符串取决于结构的一致性。在这种情况下: 1.状态元素的数量各不相同 2.太多的状态元素用于解析Mid,Left,Right,InStr,InStrRev,Len函数 3.第一部分的长度各不相同 4.分隔符(逗号)在字符串的其他地方使用

示例显示每个编号状态元素之间的逗号后面没有空格。可以使用它,虽然这意味着在Day之后丢失逗号并且其他任何逗号后跟空格。假设字符串中没有其他逗号,没有后续空格。如果存在可以依赖的状态元素的不同字符,则可以简化这一点,否则不会出现在字符串中。以下是解析过程的示例:

Sub Test()
Dim x As String, aryX() As String, i As Integer
x = "01 - Text text on Jan 04, 2019,02 - Text text on Feb 04, 2019"
x = Replace(x, ", ", " ")
aryX = Split(x, ",")
For i = 0 To UBound(aryX)
    Debug.Print Left(aryX(i), InStr(aryX(i), " on") - 1)
    Debug.Print CDate(Mid(aryX(i), InStr(aryX(i), "on ") + 3))
Next
End Sub

我建议构建一个'临时'表 - 表是永久性的,但数据是临时的。有足够的字段以容纳最多15个状态(或将这些字段添加到现有表)。打开记录集并循环记录。而不是Debug.Print,将数据写入字段。

或者甚至可以规范化数据并将每个状态的记录写入从属相关表中。

© www.soinside.com 2019 - 2024. All rights reserved.