问题标签 [ansi-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
258 浏览

sql - ANSI Sql 2003 词法间隔

为了我自己的利益,我正在编写一个 ANSI SQL Lexer。具体来说,我正在尝试遵守 ISO/IEC 9075-2:2003(E)。我在令牌阶段遇到了一些模棱两可的问题。

词法元素部分定义了一个区间字符串,如下所示:

示例:“30”

30 是没有选项的 <years value> 还是 <months value>?

理论上我可以写: SELECT '30'

我创建了 YearsValue 令牌和 MonthsValue 令牌(类)。但是,歧义是一个问题,它与两者都匹配。在 ISO/IEC 9075 的第 1 部分或第 2 部分中,我没有看到任何专门处理多个匹配项的内容。

有人可以指出在规范中这是在哪里处理的,还是只是从左到右假设?

在有人问之前,我这样做是因为我想编写一个 SQL 词法分析器。它不是为了学校,它只是为了教育自己。我也不想使用 GOLD 或 ANTLR。

0 投票
2 回答
276 浏览

sql - 从 sql 组中提取第一个匹配行

假设您有如下投影:

如何返回以下第一个关系:

即每个画家画的第一幅画..

仅限 ANSI SQL

0 投票
2 回答
94 浏览

sql - 排除同一天 drop\adds,同时保留真实的开始和结束日期

我们有一个表格,其中包含产品订阅的状态更新。订阅开始时会向表中插入一条记录,订阅结束时会使用结束日期更新该记录。我们的一个系统(不知道是哪一个)有时会在结束订阅然后再次开始(创建新记录)时执行“同一天删除\添加”。因此,相同的订阅者 ID 附加到多个记录,即使没有真正改变。

示例数据如下:

这家伙从 1/11 开始,到 1/20 结束。记录 2 和 3 由系统输入(同一天删除添加,但不是真的)。记录 4 是 19 先生后来开始的另一个订阅。

我有一些代码将尝试仅解析每个不同订阅的第一条(实际)记录,但如果不使用 max() 并按订阅者分组,它就无法找到真正的结束日期。这当然会显示两个订阅,1/11 - 1/31 和 1/30 - 1/31,这是错误的。

我正在努力将这种模式解决为两个这样的记录:

这是在 Teradata 中,但我相信它只是 ANSI SQL。

0 投票
2 回答
46 浏览

sql - 结果列表顶部的指定记录

任务:在结果列表顶部选择指定记录

我丑陋的变种:

除了ansi查询变体之外,mysql对我来说也是非常有趣的

0 投票
2 回答
17117 浏览

sql - 标准 SQL 布尔运算符 IS 与等于 (=) 运算符

在 SQL 的 Wikipedia 页面上,有一些关于 SQL 中布尔逻辑的真值表。[1] 维基百科页面似乎源自 SQL:2003 标准。

等号运算符 (=) 的真值表与 SQL:2003 草案中的 IS 运算符不同。

此外,维基百科文章指出“IS NULL”(<null predicate>)是一种特殊情况。

在 SQL:2003 中似乎有一个“IS”运算符,它是一个常规运算符,如 AND、NOT 和 OR。但是,<null 谓词> 仍然存在。

当 IS 是常规布尔运算符时,为什么会有 <null 谓词>?是否确保您可以在没有类型强制的情况下使用具有非布尔值的“IS NULL”构造?是否不鼓励使用“=NULL”?

SQL:2011 标准的工作方式是否不同?

[1]:关于 SQL 的维基百科

[2]:SQL:2011 草稿PDF 第 335 页

[3]:SQL:2003 草稿 PDF 第 397 页

0 投票
9 回答
21130 浏览

sql - 如何重写 IS DISTINCT FROM 和 IS NOT DISTINCT FROM?

在不支持它们的 SQL 实现(例如 Microsoft SQL Server 2008R2)中,如何重写包含标准IS DISTINCT FROM和运算符的表达式?IS NOT DISTINCT FROM

0 投票
2 回答
2817 浏览

sql - 'INDEX' 是有效的 SQL ANSI ISO 标准关键字/保留字吗?

我对 'INDEX' 是否是 ANSI SQL 中的关键字进行了一些研究,但我没有任何运气,特别是对于 2008 和 2011 标准。

有人确定这是否是有效的 ANSI ISO SQL 关键字吗?

0 投票
1 回答
19133 浏览

sql - SQL:具有 DATE 类型列的聚合函数

我偶然发现了一个关于哪些聚合函数适用于 DATE 类型列的问题(在测试中)。因此,据我了解, COUNT 只会计算行数,而 MIN 和 MAX 返回最早/最晚日期。但是,我对 SUM 和 AVG 函数有点困惑。他们是否会将 DATE 值转换为整数并计算这些整数的总和/平均值?还是我在这里错了?无论如何,这种行为在所有 SQL 实现中是否一致?提前致谢。

0 投票
1 回答
4506 浏览

sql - SELECT * 语句中的列顺序 - 保证?

我正在使用 ORM (sqlalchemy) 从 PG 数据库中获取数据。我想避免在我手工制作的 SQL 语句中指定所有表列名称*。

到目前为止,我的假设是返回的列按照用于创建数据库表的 DDL 语句的顺序排列。到目前为止,这是可行的——但我想知道这是否只是运气,或者它是否在(ANSI)SQL 规范中得到了具体解决。

即ANSI SQL(因此可能是数据库)是否保证SELECT *语句中返回的列的顺序?

我使用 PostgreSQL 8.4 作为我的后端数据库

  • 是的,我知道将手工制作的 SQL 语句与 ORM 一起使用会破坏 ORM 的目的,但需要必须...
0 投票
4 回答
1834 浏览

sql - Sybase *= 到 Ansi 标准,同一个内表有 2 个不同的外表

我正在尝试迁移一些遗留程序代码。我无法找出 ANSI 标准语法来产生相同的结果。

以下是我尝试过的众多组合之一。第二个连接的内表是什么,是第一个连接的输出还是源表。

请帮助我有很多代码要更改。

原始 SQL 语句

我的转换

下面是 SQL 表定义和示例数据。