我需要根据nvarchar(1000)列中的一些文本匹配过滤出记录.表有超过40万条记录并且还在增长.目前,我正在使用Like条件: -
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
Run Code Online (Sandbox Code Playgroud)
有没有首选的工作?
每当我编写一个存储过程来根据字符串变量(varchar,nvarchar,char)选择数据时,我会有类似的东西:
procedure dbo.p_get_user_by_username(
@username nvarchar(256)
as
begin
select
u.username
,u.email
--,etc
from
sampleUserTable u
where
u.username = @username
end
Run Code Online (Sandbox Code Playgroud)
所以换句话说就是匹配我所拥有的记录
u.username = @username
Run Code Online (Sandbox Code Playgroud)
但有时我会遇到使用LIK E代替=的代码
u.username like(@username)
Run Code Online (Sandbox Code Playgroud)
你什么时候用它?不应该仅在需要一些通配符匹配时才使用它吗?
编辑
谢谢你的回答.
我认为我需要澄清一下,我真正想要问的是:如果可能存在这样的情况,那么首选使用"="代替精确的字符串匹配.从答案我可以说不会有.根据我自己的经验,即使在我需要忽略例如case,以及前导和结束空间的情况下,我会在两个字符串上使用ltrim,rtrim,lower然后"=".再次感谢您的输入.
所以..我正在使用LinqToEntities,我想查询部分字段.通常我会在SQL中使用LIKE关键字,然后从那里开始..
我看到Linq没有它..什么是获得相同功能的好方法?
我正在尝试查看Oracle数据库中的表中的特定列是否包含任何包含换行符的字符串,因此是通配符,换行符和另一个通配符.
我尝试了类似的命令和CHR(10)的组合并试图逃避换行本身,但无济于事.在字符串中某处检测换行的正确方法是什么?
谢谢!
我在Microsoft SQL Server上发现这很奇怪:
SELECT * FROM deliveries WHERE code LIKE '01999195000%'
-- 9 rows returned. Works.
DECLARE @a VARCHAR(10)
SET @a='01999195000%'
SELECT * FROM deliveries WHERE code LIKE @a
-- 0 rows returned? Why not?
SET @a = '01999195000'
SELECT * FROM deliveries WHERE code LIKE @a + '%'
-- 9 rows returned. Works.
Run Code Online (Sandbox Code Playgroud)
搜索包含%字符的@a和没有添加'%'的@a之间有什么不同?
如果你们中的任何一个SQL Guru可以分享你的想法,那就太好了.
like-keyword ×5
sql ×4
sql-server ×3
c# ×1
newline ×1
oracle ×1
select ×1
sql-like ×1
t-sql ×1