sql - 区分字符数据库字段中的 "AB"和 "Ab"

标签 sql sql-server database ascii

特别是 Sql Server 2005/T-Sql。我有一个主要由两个字符组成的字段,它们都应该是大写的,但是有一些遗留数据早于当前的数据库/系统,我需要弄清楚哪些记录违反了大写套管契约。

我认为这会起作用:

select * from tbl where ascii(field1) <> ascii(upper(field1))

确实它返回给我一些记录。它们已被更正,现在该查询不返回任何数据。但是有人告诉我数据库中仍然存在混合大小写的数据,我刚刚找到了一个示例:“FS”和“Fs”都报告相同的 ascii 值。

为什么这种方法有缺陷?什么是解决此问题的更好方法,或者我如何修复此方法以使其正常工作?

最佳答案

如果所有的日期都应该是大写的,就做一个更新

update tbl
set field1 = upper(field1)

但要回答您最初的问题,此查询应该会为您提供预期的结果:

select * from tbl
where field1 COLLATE Latin1_General_CS_AS <> upper(field1)

编辑:刚刚注意到 Ian 也发布了使用 COLLATE 的建议

关于sql - 区分字符数据库字段中的 "AB"和 "Ab",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511381/

相关文章:

mysql - 选择按产品名称分组的逐年销售数据,确保仅包含 1 年的产品

java - 使用 Web 服务的 Android Mssql 服务器

sql - � 在 SQL Server 数据库中

android - 哪个会使用更多内存?数组与 SQLite (Android)

java - 不太明白如何使用 Hibernate 正确删除字段

PHP/SQL : How to concatenate/combine columns value into one row

sql - Postgresql 数组包含条目的数量?

javascript - 在插入数据库之前获取 UID 主键

php - 将用户详细信息与 HTML 一起包含在我的数据库中

sql-server - 具有区分大小写列的 T-SQL 表变量 - 整理 SQL_Latin1_General_CP1_CS_AS