使用数据库时的一个常见需求是按顺序访问记录。例如,如果我有一个博客,我希望能够以任意顺序重新排列我的博客文章。这些条目通常有很多关系,因此关系数据库似乎很有意义。
我见过的常见解决方案是添加一个整数列order:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
Run Code Online (Sandbox Code Playgroud)
然后,我们可以对行进行排序order以使它们按正确的顺序排列。
然而,这似乎很笨拙:
很容易想象这样的情况:
orderorder记录之间有间隙由于多种原因,这些可能很容易发生。
这是 Joomla 等应用程序采用的方法:

你可能会争辩说这里的界面很糟糕,他们应该使用箭头或拖放而不是人类直接编辑数字——你可能是对的。但在幕后,同样的事情正在发生。
有些人建议使用小数来存储订单,这样你就可以使用“2.5”在订单 2 和 3 的记录之间插入一条记录。虽然这有点帮助,但可以说它更混乱,因为你最终可能会得到奇怪的小数(你在哪里停?2.75?2.875?2.8125?)
有没有更好的方法将订单存储在表中?
database-design order-by database-agnostic relational-theory
在 MySQL 表定义中,INT(5)和之间有区别SMALLINT(5)吗?或者它们都代表相同的大小?
回顾这个问题,似乎不需要做很多工作。他们试图用日期扩展范围。在其他数据库中,您只需使用greatest和least..
least(extendDate,min), greatest(extendDate,max)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用这些时,我得到
'least' is not a recognized built-in function name.
'greatest' is not a recognized built-in function name.
Run Code Online (Sandbox Code Playgroud)
这将涵盖任一方向的扩展。
就问题而言,您仍然需要进行排他性范围替换。
我只是想知道 SQL Server 用户如何实现查询模式来模仿least和greatest功能。
GREATEST/LEASTGREATEST/LEASTGREATEST LEASTGREATEST LEASTGREATEST LEAST您是否将条件展开到CASE语句中,或者是否存在启用此功能的 Microsoft 的扩展、第三方加载项或许可?
这个问题是不同的,但类似于这个寻找 SQL-89 的请求。
SQL 的初稿被标记为 SQL-86。对其进行了大量引用。这个可以下载吗?维基百科甚至没有一个页面。由于历史原因,我对它感兴趣。
好像也叫
该规范在该时期的文件中被引用为来自ANSI 技术委员会 X3H2。
我知道有 webstore.ansi.org,但我找不到该X3.135-1986文件。但是,我可以X3.168-1989在X3.135-1992Searching for下找到可用的规格both X3.168,并且X3.135不允许我购买 1986 规格。
我有一个 MySQL 数据库,其中包含大量数据(100-200GB - 一堆科学测量值)。绝大多数数据存储在一张表中Sample。现在我正在创建数据库的从属副本,我想innodb_file_per_table在此过程中利用它的优势。所以我设置innodb_file_per_table了我的从属配置并导入了数据库的转储。令我惊讶的是,它失败了
第 5602 行的 ERROR 1114 (HY000):表 'Sample' 已满
该文件Sample.ibd目前约为 93GB,分区上有超过 600GB 的可用空间,因此这不是磁盘可用空间问题。它似乎没有达到任何类型的文件系统限制(我使用的是 ext4)。
对于可能是什么原因或要调查什么的任何想法,我将不胜感激。
更新:我正在使用mysql Ver 14.14 Distrib 5.1.66, for debian-linux-gnu (x86_64).
SELECT @@datadir; -- returns `/home/var/lib/mysql/`
SHOW VARIABLES LIKE '%innodb_data_file_path%'; -- ibdata1:10M:autoextend
df -h /home/var/lib/mysql/
768G 31G 699G 5% /home
Run Code Online (Sandbox Code Playgroud) 当我运行此命令时 SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total]
FROM dbo.t1 AS t
WHERE t.Id > 0
AND t.Id < 101;
Run Code Online (Sandbox Code Playgroud)
我越来越,
Arithmetic overflow error converting expression to data type int.
Run Code Online (Sandbox Code Playgroud)
关于它的原因是什么的任何想法?
我只是按照这个答案中的说明进行操作。
在我的应用程序中,我使用 C 代码在数据库中插入数据,因为我从不受信任的来源收到的字符串我已经使用PQescapeByteaConnlibpq 库对它们进行了转义。哪个工作得很好,即结果为八位字节格式字符串。看下面的例子,
输入字符串: \n\t\f\b\p\k\j\l\mestPrepared
输出字符串: \\012\\011\\014\\010pkjlmestPrepared
输出字符串被插入到数据库中。现在,我使用 JDBC 从 Java 代码中的数据库中检索该数据。如何将字符串转义回其原始值?
我想到了两种可能的方法,
我可以理解方法 1 会更有效。我已经尝试了这里列出的几乎所有功能,但没有任何效果。请帮忙!!
我在 linux 机器上使用 8.4 版的 postgres。
完整问题重写
我正在寻找 First() 聚合函数。
在这里,我发现了一些几乎有效的东西:
CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$
SELECT $1;
$$;
-- And then wrap an aggregate around it
CREATE AGGREGATE public.first (
sfunc = public.first_agg,
basetype = anyelement,
stype = anyelement
);
Run Code Online (Sandbox Code Playgroud)
问题是当 varchar(n) 列通过 first() 函数时,它会被转换为简单的 varchar(没有大小)。尝试在函数中将查询返回为 RETURNS SETOF anyelement,我收到以下错误:
错误:查询的结构与函数结果类型 Estado de SQL:42804 不匹配:返回的类型字符变化与第 2 列中的预期类型字符变化(40) 不匹配。上下文:PL/pgSQL 函数 vsr_table_at_time(anyelement,timestamp without time zone ) 第 31 行在 RETURN QUERY
在同一个 wiki 页面中,有一个指向该函数 …
我无法设置Current_timestamp为默认值。我的Mysql版本是5.5.47.
查询是
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)
虽然它在我的本地数据库上使用mysql V5.6.56.
我正在使用 Ubuntu Server 10.10 并且我已经使用apt-get install postgresql. 我想使用内置sha1()功能,但似乎必须先安装pgcrypto。但我不知道如何安装它。
没有pgcrypto,如果我尝试使用安装它apt-get install pgcrypto,我不找到以任何文件pgcrypto在我的系统(我想find / -name "pgcrypto*")。
如何安装 pgcrypto 以便我可以digest('word-to-hash','sha1')在我的数据库查询中使用该函数?
更新:我正在努力在另一台 Ubuntu 机器上安装 pgcrypto。使用sudo apt-get install postgresql-contrib-8.4如何将软件包安装到我当前的 PostgreSQL 数据库后安装软件包?
postgresql ×3
aggregate ×2
datatypes ×2
mysql ×2
sql-server ×2
bytea ×1
date ×1
encoding ×1
functions ×1
innodb ×1
installation ×1
mysql-5.1 ×1
mysql-5.5 ×1
order-by ×1
pgcrypto ×1
sql-standard ×1
string ×1
t-sql ×1
timestamp ×1