在where条件下忽略大小写的SQL查询

在where条件下忽略大小写的SQL查询,sql,Sql,我正在尝试在SQL查询下面运行。传递参数为$1。我需要区分大小写。例如: test.sql server1.net和test server1.net(这两个值都应该取,我想现在下面的查询默认只取小写的参数) 所以我的要求是,不管是什么情况,不管我给出了什么值,查询都应该处理。请帮忙 select * from act_msgs m,node_name nn where msg_name like '%test%' and nn.node_name = '$1' 在Tsql中,您可以将函数用作:

我正在尝试在SQL查询下面运行。传递参数为$1。我需要区分大小写。例如:

test.sql server1.net和test server1.net(这两个值都应该取,我想现在下面的查询默认只取小写的参数) 所以我的要求是,不管是什么情况,不管我给出了什么值,查询都应该处理。请帮忙

select * from act_msgs m,node_name nn
where msg_name like '%test%'
and nn.node_name = '$1'
在Tsql中,您可以将函数用作:

declare @varTest varchar(100);
Set @varTest = Upper('test')
select * from act_msgs m,node_name nn
where Upper(msg_name) like '%' + varTest +'%'
and nn.node_name = '$1'

默认情况下,Sql Server不区分大小写。因此,提供的值是大写还是小写都没有区别。它将被处理。 下面的例子将说明这一点:

DECLARE @MessageName    VARCHAR(50)
DECLARE @Message TABLE
(
    [ID]            INT
,   [MessageName]   VARCHAR(50)
)

INSERT INTO @Message
(
    [ID]
,   [MessageName]
)
VALUES
    (1, 'first message')
,   (2, 'SECOND MESSAGE')
,   (3, 'Third Message')
现在,无论您将变量设置为大写还是小写,查询都将返回输出:

SET @MessageName = 'FIRST MESSAGE'
SELECT * FROM @Message WHERE [MessageName] = @MessageName
结果:

ID MessageName 1第一条信息

ID MessageName
第二条消息

SQL Server、MySQL、PostGreSQL、Oracle?您使用什么DBMS/编程语言?SQL是一种全局语言,但不是MySQL、Oracle等特定方言……一种可能的解决方案是在比较lower(col)=lower('val')@MatBailie:nitpicking时,将其两端都降低。它是PostgreSQL(或者简单地说是Postgres)。名称中没有大写字母G。在where中使用函数可能会降低性能,因此最好避免使用.True,但在where子句中使用upper()或lower()确实会降低生产速度。存储用于搜索的名称的大小写版本以及用于显示的混合大小写版本几乎是值得的,或者只存储不区分大小写的排序规则序列。在不了解RDBMS的情况下,事情只是猜测。但特别是对于SQL Server,我建议使用ci排序规则,早在我提倡搜索被UPPER()函数调用掩盖的字符串之前。
SET @MessageName = 'second message'
SELECT * FROM @Message WHERE [MessageName] = @MessageName