我有几百万个域名的SQL表.但现在当我搜索让我们说
SELECT *
FROM tblDomainResults
WHERE domainName LIKE '%lifeis%'
Run Code Online (Sandbox Code Playgroud)
获得结果需要10分钟以上.我试过索引,但没有帮助.
存储这数百万条记录并在短时间内轻松访问这些信息的最佳方法是什么?
到目前为止,大约有5000万条记录和5列.
我正在使用Oracle数据库将HTML存储为Long数据类型.我想查询数据库以搜索存储在Long中的HTML数据中的特定字符串.
我试过,"从表中选择*,其中COLUMN喜欢'%form%'".这会导致以下Oracle错误,因为Long数据类型不支持"like".
ORA-00932:不一致的数据类型:预期NUMBER变长
我正在使用Oracle SQL,我希望将一些不同的行分组,这些行与"函数结果"相似.详细说明一个例子:
我们假设我有一个表MESA,其中一列是一个巨大的字符串.我正在计算与特定模式匹配的行数:
SELECT m.str, count(*)
FROM MESA m
WHERE m.str LIKE '%FRUIT%'
AND (m.str LIKE '%APPLE%' OR m.str LIKE '%ORANGE%')
Run Code Online (Sandbox Code Playgroud)
所以我们假设这个查询的结果是:
FRUIT..afsafafasfa ... RED_APPLE 20
FRUIT..afsafafasfa ... YELLOW_APPLE 12
FRUIT..afsafafasfa ... GREEN_APPLE 3
FRUIT..afsafafasfa ... PURPLE_ORANGE 4
FRUIT..afsafafasfa ... RED_ORANGE 45
但我希望我的结果是:
苹果35
橙色49
这可能吗?如果是这样,怎么会这样?:)
评论和代码片段非常感谢.
PS:当然查询和结果比上面的例子更复杂.我只是为了简单起见而编写它.
干杯..
我们可以使用"NOT LIKE '%abc%'" 正好相反的LIKE '%abc%'吗?我试过并得到了一些结果,但看起来不正确!
有没有类似的东西regex in SQL.
例如:
我有一个3场的桌子.
id name address
1 xyz 1234 abcd
2 abc nomans land
3 omg #123 new-york
3 nom $123 &7up
Run Code Online (Sandbox Code Playgroud)
我可以用特殊字符获取地址**,而不是逐个检查每个特殊字符.怎么样
我需要执行以下查询:
SELECT * FROM users WHERE ip LIKE '88.99.%';
Run Code Online (Sandbox Code Playgroud)
问题是inet数据类型似乎不支持通配符(至少不是我在前面的查询中使用它们的方式).
我想知道的是,在指定LIKE过滤器之前将字段转换为字符串是否是明智之举?(另一方面,即使方法本身有效,这可能会减慢整个查询的速度.)
我在SQL Server数据库中有一个表,其中包含一个地址字段(例如,1 Farnham Road,Guildford,Surrey,GU2XFF),我想在搜索字符串之前和之后使用通配符进行搜索.
SELECT *
FROM Table
WHERE Address_Field LIKE '%nham%'
Run Code Online (Sandbox Code Playgroud)
我在这张表中有大约200万条记录,我发现查询需要5-10秒,这并不理想.我相信这是因为前面的通配符.
我认为我说的是,由于前面的通配符,任何索引都不会用于搜索操作.
使用全文搜索和CONTAINS是不可能的,因为我想搜索单词的后半部分(我知道你可以在下面的查询中替换Guil*的搜索字符串,这将返回结果).当然运行以下返回没有结果
SELECT *
FROM Table
WHERE CONTAINS(Address_Field, '"nham"')
Run Code Online (Sandbox Code Playgroud)
有没有办法优化前面的通配符查询?
我只是发现mysql可以使用如下方式查询datetime:
like '2013-06-12%'
Run Code Online (Sandbox Code Playgroud)
我认为它不能使用索引.我谷歌,但直接找不到这样的主题.所以我使用3308614记录的表进行了测试.第一个SQL:
SELECT * FROM subscription t WHERE DATE(t.active_time) = '2013-06-30';
Run Code Online (Sandbox Code Playgroud)
我们都知道这个SQL不能使用索引,需要4秒才能得到结果.第二个SQL:
SELECT * FROM subscription t WHERE t.active_time LIKE '2013-06-30%';
Run Code Online (Sandbox Code Playgroud)
我不知道它是否可以使用索引,但它也需要4秒.第三个SQL:
SELECT * FROM subscription t WHERE t.active_time > '2007-11-30' AND t.active_time < '2007-12-01';
Run Code Online (Sandbox Code Playgroud)
我们都知道第三个SQL可以使用索引,它需要0.016秒.
所以我认为'like'在查询datetime字段时不能使用索引,因为mysql应该首先将datetime字段转换为字符串并将字符串发送到like命令.它是否正确 ?
有没有一种很好的方法可以将正则表达式转换为函数内的LIKE(MSSQL)?sproc并没有比这更复杂:
(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)
Run Code Online (Sandbox Code Playgroud)
这些组不会用在LIKE中,它们用于其他目的.
我想在一个sproc里面使用这个像:
SELECT * FROM [Table]
WHERE test_regex(regex, 'text') = 1
Run Code Online (Sandbox Code Playgroud)
正则表达式是[表]的一部分
我正在尝试使用unicode字符执行查询.我能够通过预先N查询(例如:)来执行正常的相等查询..... WHERE column=N'exact_stringâ'.但是,当我尝试使用时,这似乎不起作用LIKE.关于如何使这项工作的任何想法?
示例查询:
SELECT * FROM t_sample WHERE t_column LIKE N'%â%'
另外,我如何知道SQL Server使用哪种编码来存储nvarchar或nchar数据类型以及它用于在SQL编辑器中显示查询的编码?
编辑:我的坏.这实际上有效.我试过在错误的窗口中执行查询.但这样做的好处是我了解了SQL Server中的Collation设置.
SQL Server具有LIKE运算符来处理通配符搜索.我的客户希望在应用程序的用户界面中使用"*"(星号)字符作为通配符.我只是想知道是否有任何标准字符我需要担心(在SQL Server中用作特殊字符)除了"%"(百分比)字符本身之前执行LIKE威尔卡搜索以防其关键字包含"%"并且需要在实际字符串中找到"%".如果是这样,他们是什么?
所以请假设[table1].[column1]在文本字符串中永远不会有"*"(星号)!
这是我到目前为止所拥有的.我是否需要处理除标准"%"字符和自定义之外的更多情况"*"
-- custom replacement
select REPLACE('xxx*xxx', '*', '%')
-- standard replacements
select REPLACE('xxx%xxx', '%', '[%]')
select REPLACE('xxx_xxx', '_', '[_]') -- ???
select REPLACE('xxx[xxx', '[', '[[]') -- ???
select REPLACE('xxx]xxx', ']', '[]]') -- ???
Run Code Online (Sandbox Code Playgroud)
例:
SET @p = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@p, ']', '[]]'), '[', '[[]'), '_', '[_]'), '%', '[%]'), '*', '%')
SELECT 'xxxxxxxxx%xxxxxx' LIKE @p
SELECT [table1].[column1] LIKE @p
Run Code Online (Sandbox Code Playgroud)