问题标签 [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.
mysql - 在 MySQL 中,我应该引用数字吗?
例如 - 我从 cli 创建数据库和表并插入一些数据:
现在我可以做到这一点并且这些示例确实有效(所以 - 引号不会影响任何看起来的东西):
所以 - 在这些示例中,我通过一个字符串选择了一行,该字符串实际上存储为 mysql 中的 INT,然后我在一个为 INT 的列中插入了一个字符串。
我不太明白为什么它在这里的工作方式。为什么允许在 INT 列中插入字符串?
我可以将所有 MySQL 数据类型作为字符串插入吗?
这种行为标准是否跨不同的 RDBMS?
sql - 关系在查询中产生重复记录,DISTINCT 不起作用,还有其他可用的解决方案吗?
我是这个门户的新手。我有一个非常简单的问题要解决。它与 ANSI SQL 有关。我正在使用 BIRT 编写报告,并且正在从多个表中获取数据。我了解 SQL 连接是如何工作的,但可能并不完全。我研究了谷歌几个小时,但找不到相关答案。
我的问题是代码中的一种关系产生了重复的结果(复制了同一行 - 重复)。我下定决心要解决它,我使用了所有可用的连接类型。其中一些 SQL 已经生成。我将在下面发布我的代码。我知道我的问题的解决方案之一是使用“DISTINCT”关键字。我已经使用了它,它并没有解决我的问题。
任何人都可以提出任何解决方案吗?
示例代码:
我没有太多的测试数据,但我知道即使我使用了DISTINCT
关键字,也会将一行复制两次作为下面查询的结果。我知道我的问题相当具体而不是普遍,但有人提出的解决方案可能会帮助其他人解决类似的问题。
sql - ANSI SQL 92:查找最后一次出现的字符
我需要一个 ANSI SQL 92 语句来将最后一个 '/' 字符之后的所有字符更改为小写。
在 Sybase 上,我会写:
我可以找到 ANSI SQL 92 中的所有函数,但 REVERSE 函数只是用来查找斜线的最后一次出现。
sql - 使用具有相同参数的选择或更新时受影响的行数不同 - PostgreSQL
我有两个具有相同 Join 和 Where 子句的 SQL 语句,但我遇到的问题是 select 语句给了我不同数量的行(在我的情况下为 42),因为更新语句将更改(在我的情况下为 80,这就是所有行表)。
这是第一个(我用它来检查有多少行会受到影响):
这里是第二个(这使得工作,它将更新表类的一个字段):
第一条和第二条语句的区别只是第一行,其他都一样。
有谁知道要在两个语句中获得相同数量的行会发生什么变化?
sql - 与 SQL 中的 NULL 比较
ANSI-92 SQL 要求与NULL
评估的比较为“假”,例如:
两者都不会返回任何行,因为NULL
不能像那样进行比较。相反,必须使用谓词IS NULL
和:IS NOT NULL
研究表明,Oracle 1、PostgreSQL、MySQL 和 SQLite 都支持 ANSI 语法。将 DB2 和 Firebird 添加到该列表中。
除了ANSI_NULLS
关闭的 SQL Server,还有哪些其他 RDBMS 支持非 ANSI 语法?
1尽管整个空字符串 =NULL
混乱。
sql - SQL数据库之间的差异列表
大多数 SQL 数据库在一定程度上遵循 ANSI SQL 标准,但是
该标准是模棱两可的,留下了一些可以解释的领域(例如:不同的操作
NULLs
应该如何处理是模棱两可的)一些供应商完全与标准相矛盾,或者只是缺少标准定义的功能(例如:MySQL列出了标准与其实现之间的差异)
一些数据库的行为会根据它们的配置方式而有所不同,但可以更改配置以使它们的行为方式相同(例如:Oracle 默认执行区分大小写的字符串比较,而 SQL Server 则不区分大小写)
有一些功能不是标准的一部分,但无论如何都由不同的 RDBMS 实现,尽管名称不同(例如:Oracle's
LISTAGG
= MySQL'sGROUP_CONCAT
)
当您尝试编写应该与多个数据库兼容的东西时,是否有一个包含完整列表的怪癖和陷阱的资源?
sql - 是否有可能以这种方式使用 AGG 函数的 SQL 查询?
假设我有以下聚合函数:
- AGG1
- AGG2
- AGG3
- AGG4
是否可以像这样编写有效的 SQL(以与 db 无关的方式):
其中 COL1 ... COLN 是正在查询的表中的列,param1 ... paramX 是传递给 AGG 函数的参数。
注意: AGG1 和 AGG2 在结果中作为列返回(但不会出现在 HAVING CLAUSE 中,AGG3 和 AGG4 出现在 HAVING CLAUSE 中但不会在结果集中返回。
理想情况下,我想要一个与数据库无关的解决方案答案,但如果我必须绑定到一个数据库,我使用的是 PostgreSQL (v9.x)。
编辑
澄清一下:我不反对在查询中使用 GROUP BY。我的 SQL 不是很好,所以上面的示例 SQL 可能有点误导。我已经编辑了上面的伪 sql 语句,希望能让我的意图更清楚。
我想知道的主要事情是使用 AGG 函数的选择查询是否可以:
- 在返回的列中有 agg 函数值,而不在 HAVING 子句中指定它们。
- 在 HAVING 子句中指定了 agg 函数,但未在结果集中返回。
从我目前收到的答案来看,这两个问题的答案似乎都是肯定的。为了更正我的 SQL,我唯一要做的就是添加一个 GROUP BY 子句以确保返回的行是唯一的。
sql - 在 ANSI SQL 的 CREATE TABLE 语句中创建命名列默认值
如果可能,我想在 CREATE TABLE 语句中以符合 ANSI 的方式创建命名默认值
如果我尝试像通常在 ALTER TABLE 语句中编写它一样添加 CONSTRAINT,它会失败(至少在 SQL SERVER 中,尽管我强调我希望找到一个 ANSI 投诉语句,因为我希望它适用于各种Ado.NET DbConnections)。
例子:
错误:
'for' 附近的语法不正确。
sql - ANSI Casting Timestamp Netezza - 从 Teradata 转换 SQL
我目前不知道 ANSI 等效于 Teradata FORMAT 关键字,用于将时间戳、日期数据类型转换为我们所需的表示格式。我知道这可以通过 to_char、to_date 来完成,就像个别数据库特定的函数一样,但我想用 ANSI 编写,以便将来我可以轻松地将运行的代码从一个数据库移动到另一个数据库。下面是我正在尝试转换为 ANSI 的当前 Teradata SQL,以便我可以在 Teradata、Netezza 和 Vertica 等上运行它。
目前我不知道如何将 FORMAT 'HHMISS'、FORMAT '-9(5)' 转换为 ANSI。如果有的话,是否有关于这种可能的 ANSI 等效函数的文档?请帮忙。
sql - 选择计数 SQL 语句的 ANSI 支持
我想知道是否有符合 ANSI 标准的受支持的 Select Count SQL 语句列表?以下三种变体是我所知道的。可以在下面的所有三个上使用 where 子句吗?