我正在使用MS SQL Server 2017。在本例中,我有一个具有一个实体full name (varchar(255)
的表myTable。
在这个表中,我使用以下参数批量导入了一条记录
(FIELDTERMINATOR = '~',
ROWTERMINATOR = '0x0A' )
以下查询返回单个记录:
SELECT [full name]
FROM myTable
WHERE [full name] LIKE '%LastName%'
但是,以下查询不会:
SELECT [full name]
FROM myTable
WHERE [full name] = 'Firstname Lastname'
我已经验证了记录的存在,我已经复制了实体的值,以确保数据没有任何滑稽的事情发生。它是干净的,我甚至尝试过这个:
SELECT [full name]
FROM myTable
WHERE [full name] = 'Firstname Lastname '
以确保在列的末尾没有随机空格。是什么导致了这样的问题?
发布于 2019-04-16 03:42:06
我有一个很方便的脚本,可以用来识别不可见的字符;它给出了字符串中的每个字符,但每个字符都是单独的一行。
DECLARE @nstring NVARCHAR(1000)
select top 1 @nstring = [full name]
FROM myTable
WHERE [full name] LIKE '%LastName%'
print @nstring
DECLARE @position INT
SET @position = 1
DECLARE @CharList TABLE (
Position INT,
UnicodeChar NVARCHAR(1),
UnicodeValue INT
)
WHILE @position <= DATALENGTH(@nstring)
BEGIN
INSERT @CharList
SELECT @position as Position
,CONVERT(nchar(1),SUBSTRING(@nstring, @position, 1)) as UnicodeChar
,UNICODE(SUBSTRING(@nstring, @position, 1)) as UnicodeValue
SET @position = @position + 1
END
SELECT * FROM @CharList
发布于 2019-04-16 02:29:37
=
运算符仅在精确匹配时才起作用
但LIKE
运算符用于在数据中搜索指定的模式。
因此,在您的示例中,比较值不直接与列值匹配,这就是为什么它不返回任何行,但在类似于它匹配模式的时候,它返回行
发布于 2019-04-16 03:20:23
顾名思义,LIKE
主要用于比较表单主要是regular expressions
格式的数据
然而,
=
只找到完全匹配的内容,而不是说它应该是某种形式,而是=
左侧的数据应该是右侧数据的清晰副本。
例如:
根据上面输入的示例..where fullname LIKE %FirstName%
。这通常意味着,选择fullname中有名字的数据
如果我替换这个%
...where fullname LIKE FirstName
,那么它将与...where fullname = FirstName
相同,因为这里它需要精确匹配,而不是某种形式的数据
https://stackoverflow.com/questions/55695231
复制相似问题