Tag: sql

计算PostgreSQL中两个date之间的工作时间

我正在开发一个使用Postgres(PL / pgSQL)的algorithm,我需要计算两个时间戳之间的工作小时数,考虑到周末不工作,剩下的时间只在上午8点到下午15点之间计算。 例子: 从12月3日下午14点到12月4日上午9点应该算两个小时: 3rd = 1, 4th = 1 从12月3日下午15点到12月7日上午8点应计算8小时: 3rd = 0, 4th = 8, 5th = 0, 6th = 0, 7th = 0 考虑小时数也是很好的。

PostgreSQL中是否有类似zip()函数的组合两个数组?

我在PostgreSQL中有两个相同长度的数组值: {a,b,c}和{d,e,f} 我想把它们结合起来 {{a,d},{b,e},{c,f}} 有没有办法做到这一点?

如何在不使用游标的情况下计算SQL中的运行总数?

为了简洁起见,我将所有的游标设置和临时表中的SELECT都舍弃了。 基本上,这个代码计算每笔交易的所有交易的运行余额。 WHILE @@fetch_status = 0 BEGIN set @balance = @balance+@amount insert into @tblArTran values ( –from artran table @artranid, @trandate, @type, @checkNumber, @refNumber,@custid, @amount, @taxAmount, @balance, @postedflag, @modifieddate ) FETCH NEXT FROM artranCursor into @artranid, @trandate, @type, @checkNumber, @refNumber, @amount, @taxAmount,@postedFlag,@custid, @modifieddate END 这个代码从另一个问题的答案启发, SELECT @nvcConcatenated = @nvcConcatenated + C.CompanyName + ', ' FROM […]

WHERE子句与ON时使用JOIN

假设我有以下T-SQL代码: SELECT * FROM Foo f INNER JOIN Bar b ON b.BarId = f.BarId; WHERE b.IsApproved = 1; 下面的一个也返回相同的一组行: SELECT * FROM Foo f INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId); 这可能不是最好的例子,但这两者之间有什么performance差异?

在MySQL查询中结合UNION和LIMIT操作

我有一个Jobs和一个公司的表格,我想提取20个符合以下标准的工作: 只有两(2)名公司的工作 每个公司最多可以有10个工作 我已经尝试了UNION DISTINCT的以下SELECT ,但问题是LIMIT 0,10适用于整个结果集。 我希望它适用于每个公司。 如果每个公司没有10个工作,那么查询应该返回find的所有工作。 SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company1') UNION DISTINCT SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company2') ORDER by name, title […]

CASE语句和DECODE是否相同?

看起来像简单的CASEexpression式和DECODE函数是等价的,它们返回的结果应该是相同的。 他们? 该文档有以下关于简单的CASEexpression式的说法: 简单的CASEexpression式返回selector_value匹配select器的第一个结果。 剩余的expression式不被评估。 如果没有selector_value匹配select器,则CASEexpression式返回else_result(如果存在),否则返回NULL。 将其与DECODE函数进行比较,说明似乎是相同的。 DECODE将expr与每个search值逐一进行比较。 如果expr等于search,则Oracle数据库返回相应的结果。 如果找不到匹配,则Oracle返回默认值。 如果省略默认值,那么Oracle返回null。 由于search到的CASEexpression式可以等价于简单的,所以这可以被解释为相同。 这三个陈述似乎都返回相同的结果0。 select case 1 when 2 then null else 0 end as simple_case , case when 1 = 2 then null else 0 end as searched_case , decode(1, 2, null, 0) as decode from dual 做简单的CASEexpression式和DECODE函数(在特定情况下search的CASEexpression式)总是返回相同的结果吗?

SQL中的where子句的顺序是重要的

比方说,我有一个名为PEOPLE的表有3列ID, LastName, FirstName ,这些列都没有索引。 LastName更加独特, FirstName不那么唯一。 如果我做2个search: select * from PEOPLE where FirstName="F" and LastName="L" select * from PEOPLE where LastName="L" and FirstName="F" 我的观点是第二个更快,因为更独特的标准( LastName )在where子句中首先出现,并且logging将被更有效地消除。 我不认为优化器是足够聪明的优化第一个SQL。 我的理解是正确的吗?

SQL查询将列数据拆分成行

我有SQL表中,我有2个字段为No和declaration Code Declaration 123 a1-2 nos, a2- 230 nos, a3 – 5nos 我需要显示该代码的声明为: Code Declaration 123 a1 – 2nos 123 a2 – 230nos 123 a3 – 5nos 我需要将列数据拆分为该代码的行。

MySQL的variables格式为“NOT IN”值列表

疯狂地试图在一个查询types中设置一个variables: SET @idcamposexcluidos='817,803,495'; 所以我可以使用它 WHERE id_campo not in (@idcamposexcluidos) 我已经试过用不同的格式定义variables,没有运气,似乎没有find上述的具体例子: SET @idcamposexcluidos='(817,803,495)'; … WHERE id_campo not in @idcamposexcluidos SET @idcamposexcluidos=817,803,495; 没有成功。 它要么返回一个错误,要么忽略这个值。

使用ISNULL与使用COALESCE检查特定的条件?

我知道可以将多个parameter passing给COALESCE ,但是如果您只想检查一个expression式以查看它是否不存在,那么您使用默认还是使用ISNULL而不是使用ISNULL ? 两者之间是否有性能提升?