我正在使用Access DB,表中的数据如下
var containsNumbers = s.Any(c=>Char.IsNumber(c));
var isNumber = s.All(c=>Char.IsNumber(c));
我正在寻找的预期输出
ID Number
1 12,34,45,55,67,66,5,7
2 45,55,67,89,777
3 23,45,67,88,777,8888,564
4 1,234,567,890,987,650,000,000
5 222,233,345,645,634,000
6 33,44,55,66,77
7 12,34,22,88,99
我有accessdb,没有其他数据库。请您帮助我解决此问题,因为我不知道Accessdb。如果您需要更多详细信息,请告诉我。
这是我在Access db查询中编写的查询,因此它的作用是根据ID在另一个表中正在更新的数字。
Id Number
1 12
1 34
1 45
1 55
1 67
1 66
1 5
1 7
2 45
2 55
2 67
2 89
2 777
答案 0 :(得分:0)
这是一个非常复杂的任务,但可以通过创建VBA函数以将项目放在特定位置,然后交叉联接预填充的连续序列表或序列生成查询来实现。
首先,我们声明VBA函数(来自here,我告诉你为什么也不能为此使用SQL):
Public Function SplitString(str As String, delimiter As String, count As Integer) As Variant
Dim strArr() As String
strArr = Split(str, delimiter, count + 1)
count = count - 1 'zero-based
If UBound(strArr) >= count Then
SplitString = strArr(count)
End If
End Function
然后,将其与生成表/查询的序列一起使用以拆分字符串。在我的示例中,我将使用this query中的Gustav作为序列生成器:
SELECT MyTable.ID, SplitString(MyTable.[Number], ",", Sequence.[Value]) As [Number]
FROM
MyTable,
(
SELECT DISTINCT
[Tens]+[Ones] + 1 AS [Value],
10*Abs([Deca].[id] Mod 10) AS Tens,
Abs([Uno].[id] Mod 10) AS Ones
FROM
msysobjects AS Uno,
msysobjects AS Deca;
) As Sequence
WHERE SplitString(MyTable.[Number], ",", Sequence.[Value]) Is Not Null
答案 1 :(得分:0)
我认为显而易见的初始问题是,为什么要在一个字段中存储多个“数字”:这与使用关系数据库(甚至是Access)的观点背道而驰。您将一个逗号分隔的值存储在一个字段中是有原因的吗?将每个“数字”存储在单独的字段中肯定会使您的查询更易于构建。
另一个问题:存储的某些数字为“ 000”。这些是有效代码,还是不表示任何值(即null)?在您的输出中将如何处理它们?
我认为,如果可能的话,最好创建两个单独的表:一个表用于存储ID(以及其他关联的属性),另一个表用于存储每个实体的ID。例如:tEntity
可以存储每个实体的ID(和名称)。 tEntityValues
对于绑定到实体的每个数字/代码,将有单独的一行。这样,您的查询就会简单得多。