【问题标题】:select record with any kind of writing a username / field选择任何类型的写入用户名/字段的记录
【发布时间】:2014-01-09 14:25:32
【问题描述】:

我想创建一个 sql 语句,它接受任何给定名称的书写

select * from Mytable where username='Peter';

我没有注意在数据库中以正确的方式编写 Peter。现在我也想选择具有此内容的记录:

PETER
PeTER
PeteR
peteR
....

使用 ADO 和 DELPHI XE 2 和 MSSQL Server EXPRESS 版本。

【问题讨论】:

标签: sql-server tsql sql-server-2012-express


【解决方案1】:

SQL Server 排序规则SQL_Latin1_General_CP1_CS_AS - 不区分大小写的搜索。 如果您的数据库的默认排序规则不区分大小写,您可以明确地让您的查询忽略大小写。

select * from Mytable 
where Username COLLATE SQL_Latin1_General_CP1_CS_AS= @Username COLLATE SQL_Latin1_General_CP1_CS_AS;

【讨论】:

    【解决方案2】:

    如果性能不是很重要,一个选择是在比较之前将每个小写(或大写)设为:

    SELECT * FROM MyTable WHERE LOWER(username) = LOWER('Peter');
    

    【讨论】:

    • Like 并不能解决问题,并且在您的连接中调用函数会非常昂贵。最好进行不区分大小写的搜索。
    • @BillGregg:此语句中没有 JOIN;我进行了编辑以记录性能影响。
    【解决方案3】:

    你可以让两边都大写或小写:

    where UPPER(username) = 'PETER'

    【讨论】:

    • 在您的联接中调用函数会非常昂贵。最好进行不区分大小写的搜索。
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2012-05-16
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2013-07-19
    相关资源
    最近更新 更多