[英]Finding a case sensitive record
我需要从表的一列中获取区分大小写的记录。
即他们是一个列email_address,我必须从中找到相同的电子邮件地址,但它们在不同的情况下。
例如:
email_ address
---------------
abc@gmail.com
hef@gmail.com
ABC@gmail.com
hrf@gmail.com
从上面的例子给出。我需要一个查询来从email_address
列中只获取记录abc@gmail.com
和ABC@gmail.com
。
我个人不喜欢这种方法,但它似乎是我现在唯一的解决方案,它也适用于混合情况:
select * from test t
where
email_address in
(
select email_address from test group by email_address having count(email_address)> 1
)
and left(email_address, charindex('@', email_address) -1 ) collate SQL_Latin1_General_CP1_CS_AS
not in (select left(email_address, charindex('@', email_address) -1 ) from test
where email_address collate SQL_Latin1_General_CP1_CS_AS <> t.email_address )
p / s:你需要用你的实际表名替换“test”
试试这段代码
SELECT *
FROM table T
JOIN tALBE T2
ON T.EMAIL = T2.EMAIL
AND CONVERT(varbinary,T.EMAIL) <> CONVERT(varbinary,T2.EMAIL)
假设您的数据库不区分大小写,但您需要查找相同的值,但在不同的情况下,这可能有效 -
WITH CTE AS(
SELECT
email_address
FROM TEST
GROUP BY email_address
Having count(1) > 1
)
SELECT TEST.email_address
FROM TEST
INNER JOIN CTE ON
TEST.email_address=CTE.email_address
使用以下条件
Where [email_ address] COLLATE Latin1_General_100_CI_AI = 'abc@gmail.com'
试试这个,
Select * from TableName where email_ address COLLATE Latin1_General_CS_AS = 'Your I/p Values'
试试这个:
SELECT *
FROM
( VALUES ('abc'), ('ABC'), ('AbC')
) x(name)
WHERE name COLLATE Latin1_General_100_CS_AI = 'abc'
我们可以通过两种方式查找区分大小写的记录1.使用COLLATE Latin1_General_CS_AI 2.使用BINARY_CHECKSUM
create table EmailDetails(EID int identity(1,1),EmailAddress varchar(100))
insert into EmailDetails values('abc@gmail.com')
insert into EmailDetails values('ABC@gmail.com')
select EmailAddress from EmailDetails
where EmailAddress COLLATE Latin1_General_CS_AI=LOWER(EmailAddress)
select EmailAddress from EmailDetails
where EmailAddress COLLATE Latin1_General_CS_AI='abc@gmail.com'
select EmailAddress from EmailDetails
where BINARY_CHECKSUM(EmailAddress)=BINARY_CHECKSUM('abc@gmail.com')
这是答案,
declare @t table(email varchar(100))
insert into @t values('abc@gmail.com'),('hef@gmail.com'),('ABC@gmail.com'),('hrf@gmail.com')
declare @searchEmail varchar(100 )= 'ABC@gmail.com'
---1st approach
SELECT *
FROM @t
WHERE
email = @searchEmail COLLATE SQL_Latin1_General_CP1_CS_AS
---2nd approach to convert in binary
select * from @t where CAST(email as varbinary(100)) = CAST(@searchEmail as varbinary(100))
可以通过更改排序规则来完成,默认情况下它不区分大小写。
通过使用排序规则或转换为二进制,如下所示:
检查相同的答案问这里..
使用通配符sql查询运算符或命令..我不知道它叫什么我忘了..你通过在WHERE
变量的左右部分添加“ %
”符号来使用它,如:
SELECT * FROM TABLE WHERE COLUMN = %@VARIABLE%
希望这可以帮助
只是在SQL中使用“LIKE”:)
SELECT email_address FROM <tablename> WHERE email_address like 'abc@gmail.com'
它会显示忽略大小写的所有电子邮件地址:)
或者你可以使用更多的进步,如开始,结束,包含
SELECT email_address FROM <tablename> WHERE email_address like '%abc%' //contains with
SELECT email_address FROM <tablename> WHERE email_address like 'abc%' //Begin with
SELECT email_address FROM <tablename> WHERE email_address like '%abc' //Ends with
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.