![](/img/trans.png)
[英]Perform a case-sensitive sql query with StrComp funtion for MS Access in c#
[英]How to perform case sensitive group by in MS Access
在MS Access数据库中查找两个表(Employee和Employee_PROD)之间的不匹配(即差异)记录,我正在使用UNION ALL 。 查询如下:
SELECT [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM
(SELECT '[Employee]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee]
UNION ALL
SELECT '[Employee_PROD]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee_PROD] )
GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY]
HAVING COUNT(*) = 1 AND MIN(TableName) = '[Employee]'
我面临的问题是GROUP BY
没有考虑区分大小写。 例如,“ 一个 ndrew”和“ 一个 ndrew”被视为相同。 我想区分大小写执行分组查找差异记录。
有什么方法可以在MS Access中执行相同的操作?
还有其他方法可以找到具有相同列名,数据类型和记录数为7,00,000的两个表之间的差异吗?
我尝试了以下方法:
DataTable
加载到DataTable
,然后找到差异。 由于大量数据而导致内存不足异常。 NOT EXISTS
比较行。 查询被挂起,执行从未完成。 UNION ALL
方法有效,但是问题在于GROUP BY
没有考虑大小写敏感性。 您可以按字节值分组:
? StrToByte("Andrew")
416E64726577
? StrToByte("andrew")
616E64726577
尽管您拥有大量数据可能会有点慢。
Public Function StrToByte(ByVal strChars As String) As String
Dim abytChar() As Byte
Dim lngChar As Long
Dim strByte As String
abytChar() = StrConv(strChars, vbFromUnicode)
strByte = Space(2 * (1 + UBound(abytChar) - LBound(abytChar)))
For lngChar = LBound(abytChar) To UBound(abytChar)
Mid(strByte, 1 + 2 * lngChar) = Hex(abytChar(lngChar))
Next
StrToByte = strByte
End Function
仅对于SQL,并且如果仅关于第一个字符,请尝试:
GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name], ASC([Name]),[SUB_COMPANY]
您是否不能在模块中指定OPTION COMPARE BINARY来执行区分大小写的搜索?
该线程https://access-programmers.co.uk/forums/showthread.php?t=33962以及该如何编写区分大小写的MS Access查询? 两者都描述了不同的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.