这是一个非常有趣的问题(针对 SQL Server 提出的问题),我想尝试一下,看看它是如何在 PostgreSQL 中完成的。让我们看看其他人是否可以做得更好。拿着这个数据,
CREATE TABLE foo
AS
SELECT pkid::int, numvalue::int, groupid::int
FROM ( VALUES
( 1, -1 , 1 ),
( 2, -2 , 1 ),
( 3, 5 , 1 ),
( 4, -7 , 1 ),
( 5, 1 , 2 )
) AS t(pkid, numvalue, groupid);
Run Code Online (Sandbox Code Playgroud)
我们正在尝试生成这个:
PKID RollingSum GroupID
----------------------------- ## Explanation:
1 0 1 ## 0 - 1 < 0 => 0
2 0 1 ## 0 - 2 < 0 …Run Code Online (Sandbox Code Playgroud) 想象一个包含以下列的简单表:
item_id, date
和值:
CREATE TABLE foo (item_id int, date date);
INSERT INTO foo(item_id, date)
VALUES
( 1, '2017-02-10' ),
( 2, '2017-02-10' ),
( 1, '2017-02-11' ),
( 1, '2017-02-12' ),
( 1, '2017-02-13' ),
( 2, '2017-02-13' ),
( 1, '2017-02-14' );
Run Code Online (Sandbox Code Playgroud)
如何选择item_id表中连续7天记录的s?
开始和结束日期未知。它应该从任何开始日期到之后的连续 7 天都可用。
我试图找出位于矩形区域(信封)内的点。我在使用了一点点难度的理解性能影响&&运营商相比ST_Intersect。
但是,我想我在尝试提出我的问题时解释了我自己的问题。我无论如何都会提交它,以防它对某人有用。
&&的手册说(具有讽刺意味的是,页面名称是 geometry_overlaps.html):
&& — 如果 A 的 2D 边界框与 B 的 2D 边界框相交,则返回 TRUE。`
ST_Intersects的手册说:
如果几何/地理“在二维空间上相交”-(共享空间的任何部分),则返回 TRUE,如果不相交(它们不相交),则返回 FALSE。对于地理 - 容差为 0.00001 米(因此任何靠近的点都被视为相交)
ST_Intersects在这种情况下将返回 true。因为我&&在任何一种情况下都使用矩形边界框,所以我的目标运算符几乎做同样的事情。我想知道是否&&是我的目的最快的运营商?感觉&&必须做更少的检查,所以它必须更有效率。
这是一个直接复制自&&,ST_Intersects改编的示例:
SELECT
t1.id AS t1,
t2.id AS t2,
t1.ln && t2.ln AS "&&",
ST_Intersects(t1.ln,t2.ln)
FROM ( VALUES
(1, 'LINESTRING(0 0, 3 3)'::geometry),
(2, 'LINESTRING(0 1, 0 5)'::geometry)
) AS t1(id,ln)
CROSS JOIN (VALUES
(3, 'LINESTRING(1 2, 4 …Run Code Online (Sandbox Code Playgroud) ICU 指定不同的LDML 整理设置。其中一些看起来很有趣,尤其是关于大小写和口音的那些,
- “忽略重音”:
strength=primary- “忽略重音”但要考虑大小写:
strength=primary caseLevel=on- “忽略大小写”:
strength=secondary- “忽略标点符号”(完全):
strength=tertiary alternate=shifted- “忽略标点符号”但区分标点符号:
strength=quaternary alternate=shifted可能是更好的做事方法
您还可以在此处查看这些文档。PostgreSQL 10 ICU 整理支持是否可以使用这些 ICU 选项和设置?
CREATE COLLATION special (provider = icu, locale = 'en@strength=primary');
SELECT 'Å' LIKE 'A' COLLATE "special"; # returns false
Run Code Online (Sandbox Code Playgroud)
我也试过CLDR BCP47
从 ICU 54 开始,排序规则属性也可以通过语言环境关键字指定,使用旧的语言环境扩展语法 ("
el@colCaseFirst=upper") 或语言标记语法 ("el-u-kf-upper")。关键字和值不区分大小写。请参阅LDML 归类规范、归类设置和列出有效归类关键字及其值的数据文件。(不支持已弃用的属性 kh/colHiraganaQuaternary 和 vt/variableTop。)
为此,这看起来是对的
CREATE COLLATION special (provider = icu, locale = 'en-ks-level1');
SELECT …Run Code Online (Sandbox Code Playgroud) postgresql collation postgresql-10 international-components-unicode
在玩 SQL Server 时,我遇到了一个半隐秘的错误。本质上,我只需要登录 DAC。对于何时需要 DAC,是否有任何一般性建议?我怎么知道我需要它来访问sys.sysobjvalues而不用谷歌搜索错误消息?
DAC 提供哪些访问权限?
PostgreSQL 支持 SQL 规范的VALUES表达式,规范称为<table value constructor>
SELECT *
FROM (VALUES
(1, 'one'),
(2, 'two'),
(3, 'three')
) AS t(num,letter);
num | letter
-----+--------
1 | one
2 | two
3 | three
(3 rows)
Run Code Online (Sandbox Code Playgroud)
在dbfiddle上尝试,我无法让它在 Oracle 中工作。我不断得到
ORA-00903: 无效的表名
Oracle 是否支持VALUES ( expression [, ...] )? 如果不是,从查询中提供的行文字创建虚拟表的替代方法是什么?
serial我的应用程序表中有一个ID。但是,我想插入一个0id 记录来表示全局。
有没有一种方法可以将它插入我的桌子而不影响计数器?
我对如何做某事没有疑问,但我是否应该这样做。抱歉,如果有更合适的论坛。
我有一个功能:
CREATE OR REPLACE FUNCTION get_name(user_id UUID) RETURNS TEXT AS $$
SELECT username
FROM users
WHERE users.id=user_id
$$ LANGUAGE 'sql';
Run Code Online (Sandbox Code Playgroud)
我喜欢使用这个函数在其他查询中从 user_id 转换为用户名。这是一个常见的操作,我认为一个函数会加快开发时间,以查找一次性统计数据以进行数据分析。我不关心查询速度。这是使用函数来执行此操作的好习惯还是我应该只执行连接?
我对此很陌生,我的同事说将函数用于常规选择/连接可以执行的操作是不好的做法。他还提到,函数最好用于常规选择无法完成的事情。所以我想问其他人什么是好的做法?
编辑:如果这是一种不好的做法,那么对于函数执行稍微复杂一些的常见操作的情况是否更合理?
在 Oracle 中,我使用
SELECT * FROM table1...JOIN...
Run Code Online (Sandbox Code Playgroud)
其中点表示连接类型或连接条件。
这是 ANSI 89 语法吗?如果没有,那么如果我使用 ANSI 89,我将如何执行连接?
postgresql ×6
postgis ×2
spatial ×2
aggregate ×1
collation ×1
dac ×1
functions ×1
insert ×1
international-components-unicode ×1
join ×1
mysql ×1
oracle ×1
php ×1
sequence ×1
sql-server ×1
sql-standard ×1