【问题标题】:Like Operator does not workLike 运算符不起作用
【发布时间】:2016-01-27 07:05:21
【问题描述】:

我在 SQL Server 2014 Enterprise 中有以下代码:

SELECT c.Id
FROM dbo.Content c 
WHERE c.Id = 8753495 AND c.Content LIKE '%Paypal%'

此代码用于了解内容是否与 Paypal 一词匹配并返回 0 个结果,对于该 id,我知道它在内容中包含“Paypal”一词。

我尝试过使用不同的内容词,其中一些词有效,而另一些则无效。

数据库和Content 表都使用SQL_Latin1_General_CP1_CI_AS 排序规则。

谁能帮帮我?

编辑: 这个查询的目的是做别的事情,不仅返回id,而且我发现like运算符的问题,所以我给你失败的部分

也尝试了上/下,但仍然不起作用

这里是创建脚本。

CREATE TABLE [dbo].[Content](
    [Id] [int] NOT NULL,
    [Content] [nvarchar](max) NULL,
 CONSTRAINT [PK_Content_1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

感谢您的回复。

编辑 2: Like operation returns no rows on nvarchar column filter if the column data start with numeric 没有回答这个问题。 模式的末尾有一个空格。

这里的问题是一个恶意客户端放置了看起来相似的字符,这样可以避免验证并可能发送垃圾邮件

例如,Unicode 1056 十进制(420 hexa)是类似于拉丁文 P(Ascii 80)的希腊字符

【问题讨论】:

  • 你试过lower(c.Content) LIKE '%paypal%'吗?
  • 你能举一个你期望返回的行的例子吗?
  • 请同时提供表创建语句,以便我们查看列类型

标签: sql sql-server-2014 sql-like


【解决方案1】:

嗯,我发现了错误。

内容是由客户端(垃圾邮件发送者)上传的,当查看每个字符的 ascii 时,我发现客户端将内容放在了相似的 unicode 字符上。

所以“Paypal”不是预期的“Paypal”,这是 Paypal 单词的结果与预期结果的比较:

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多