繁体   English   中英

如何在MS Access中执行区分大小写的分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM