SQL 查询 Where Column = '' 返回表情符号字符和
SQL Query Where Column = '' returning Emoji characters and
好的,所以我有一个包含三列的 table:
Id, Key, Value
我想删除所有 Value
为空的行 (''
)。因此我在删除之前将查询写到 select 是:
Select * from [Imaging.ImageTag] where [Value] = ''
到目前为止都非常标准...
现在是奇怪的部分。此查询返回了如下所示的两行,各行以逗号分隔:
CE7C367C-5C4A-4531-9C8C-8F2A26B1B980, ObjectType,
F5B2F8A8-C4A8-4799-8824-E5FFEEDAB887, Caption,
为什么这两行在 ''
上匹配?
额外信息
我正在使用 Sql-Server,[Value]
列的类型是 NVARCHAR(300)
是的 table 名称确实是 [Imaging.ImageTag]
这不是您 "why" 的答案,但就您的总体目标而言,也许您应该改变搜索空值的策略:
Select * from [Imaging.ImageTag] where LEN([Value]) = 0
根据评论(感谢 Martin Smith 提供一些 copy/pastable 表情符号):
SELECT CASE WHEN N'' = N'' then 1 else 0 end --returns 1, no good for checking
SELECT LEN(N'') --returns 2, can be used to check for zero length values?
这是排序规则相关的。
匹配空字符串
SELECT 1 where N'' = N'' COLLATE latin1_general_ci_as
不匹配空字符串
SELECT 1 WHERE N'' = N'' COLLATE latin1_general_100_ci_as
100
归类更先进(虽然还不是最先进的,但它们自 2008 年以来就可用),除非您有某些特定原因不这样做,否则您应该使用更现代的归类。 The BOL entry for 100 collations特地喊出来
Weighting has been added to previously non-weighted characters that
would have compared equally.
Google 派我到这里寻找一种方法来过滤 varchar
列上带有表情符号的所有行。
如果您正在寻找类似的东西:
SELECT mycolumn
FROM mytable
WHERE REGEXP_EXTRACT(mycolumn,'\x{1f600}') <> ''
--sqlserver WHERE SUBSTRING(MyCol, (PATINDEX( '\x{1f600}', MyCol ))) <> ''
\x{1f600}
是搜索到的表情符号的字符代码,您可以找到表情符号代码 here
补充这个答案
当您需要在 sql
处使用 'like' 时
WHERE
N'' + COLUMNS like N'%'+ @WordSearch +'%' COLLATE latin1_general_100_ci_as
好的,所以我有一个包含三列的 table:
Id, Key, Value
我想删除所有 Value
为空的行 (''
)。因此我在删除之前将查询写到 select 是:
Select * from [Imaging.ImageTag] where [Value] = ''
到目前为止都非常标准...
现在是奇怪的部分。此查询返回了如下所示的两行,各行以逗号分隔:
CE7C367C-5C4A-4531-9C8C-8F2A26B1B980, ObjectType,
F5B2F8A8-C4A8-4799-8824-E5FFEEDAB887, Caption,
为什么这两行在 ''
上匹配?
额外信息
我正在使用 Sql-Server,[Value]
列的类型是 NVARCHAR(300)
是的 table 名称确实是 [Imaging.ImageTag]
这不是您 "why" 的答案,但就您的总体目标而言,也许您应该改变搜索空值的策略:
Select * from [Imaging.ImageTag] where LEN([Value]) = 0
根据评论(感谢 Martin Smith 提供一些 copy/pastable 表情符号):
SELECT CASE WHEN N'' = N'' then 1 else 0 end --returns 1, no good for checking
SELECT LEN(N'') --returns 2, can be used to check for zero length values?
这是排序规则相关的。
匹配空字符串
SELECT 1 where N'' = N'' COLLATE latin1_general_ci_as
不匹配空字符串
SELECT 1 WHERE N'' = N'' COLLATE latin1_general_100_ci_as
100
归类更先进(虽然还不是最先进的,但它们自 2008 年以来就可用),除非您有某些特定原因不这样做,否则您应该使用更现代的归类。 The BOL entry for 100 collations特地喊出来
Weighting has been added to previously non-weighted characters that would have compared equally.
Google 派我到这里寻找一种方法来过滤 varchar
列上带有表情符号的所有行。
如果您正在寻找类似的东西:
SELECT mycolumn
FROM mytable
WHERE REGEXP_EXTRACT(mycolumn,'\x{1f600}') <> ''
--sqlserver WHERE SUBSTRING(MyCol, (PATINDEX( '\x{1f600}', MyCol ))) <> ''
\x{1f600}
是搜索到的表情符号的字符代码,您可以找到表情符号代码 here
补充这个答案 当您需要在 sql
处使用 'like' 时WHERE
N'' + COLUMNS like N'%'+ @WordSearch +'%' COLLATE latin1_general_100_ci_as