我必须编写一个简单的查询,在其中查找以 B 或 D 开头的人名:
SELECT s.name
FROM spelers s
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法重写它以提高性能。所以我可以避免or
和/或like
?
postgresql index regular-expression pattern-matching string-searching
我正在检查数据库服务器,问题是大约有 40 个数据库,每个数据库有数百个表。我正在寻找列名包含特定单词的表。
有没有办法进行搜索来识别这些表?
我正在构建一个应用程序,它将每隔一段时间使用 JSON 获取消息并将这些消息存储在 postgres 数据库中。现在我想防止重复,所以我计算了消息的 sha-512 并将其设置为主键。由于我想防止重复,我可以做两件事:
考虑到我可能会一次插入几条消息,我想知道方法 2 是否会查找主键并查看每个插入是否存在,而不是仅使用方法 1 在内存中存储一个列表。什么是最多的高效的?
我想要做的是以下概念:
SELECT field1,field2,field3
FROM table1
where field3 like '%'+(SELECT distinct field from table2)+'%'
Run Code Online (Sandbox Code Playgroud)
但这是不允许的,因为 like 不接受多个值。如何重写此查询,以便我可以通配符匹配具有来自另一个表的多个结果值的字段?
我将如何在 postgres 中做到这一点:
假设我有一个 x 和 ay,我想显示所有可能的组合:
xx
yy
xy
yx
Run Code Online (Sandbox Code Playgroud)
我怎样才能让 postgres 为我做这件事?
我有点不高兴,我必须对数据质量很差的数据库执行查询。我正在尝试评估一个包含日期但被定义为nvarchar
. 我以为我可以将值转换为整数,但这失败了,因为日期字段中也有非日期值(随机字母和符号等)。
我决定做的事情如下:
SELECT q.foo, cast( q.bar as int)
FROM ( SELECT foo,bar FROM table where ISNUMERIC(bar) = 1) as q
WHERE q.bar > 20140401
Run Code Online (Sandbox Code Playgroud)
但这仍然会导致 nvarchar 值的转换失败'. '
。我希望所有值都可以转换为 int,因为它们是数字?
我一直在计算包含大约 500.000 条双精度数字记录的列的总和。数据库中的所有数字通常应该是句点后面的两个密码。但是,在计算总和后,我得到了 6 个数字:123123123.549977
要么我的数据库中有错误的数据,其中在句点之后有更多数字的记录,要么我遗漏了 sum 函数。
所以我的问题是: