select
convert(varchar(10), TotalSeconds / 3600) +':'+
convert(varchar(10), TotalSeconds % 3600 / 60) +':'+
convert(varchar(10), TotalSeconds % 60) as Seconds
from
(select
DateDiff
(second, date,outtime )
as TotalSeconds
from attendance.attn_card_register) x -- this one
Run Code Online (Sandbox Code Playgroud) 我最近从 SQL Server 2005 升级到 2012。但是在验证过程中,发现了一个错误。
某个触发器的编码如下:
CREATE TRIGGER [dbo].[trigger] on [dbo].[foo]
FOR UPDATE, UPDATE
AS
UPDATE foobar
SET datetime = GetDate()
FROM bar
WHERE foobar.id = bar.id
GO
Run Code Online (Sandbox Code Playgroud)
我可以在 SQL Server 2005 上安全地执行这个(奇怪的)。
但是,在 SQL Server 2012 上,它会引发(我所期望的)语法错误。
语法错误:触发器声明中操作“UPDATE”的重复规范。
为什么这不会在 SQL Server 2005 上引发语法错误?我在这方面的 google-fu 失败了。
为什么这似乎适用于 SQL Server 2005?
在 PostgreSQL 11 中,以下表达式
UPDATE test_table SET ("column_a","column_b") = ('value-a','value-b') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
被接受并执行更新。
但是对于单个列/值,例如
UPDATE test_table SET ("column_a") = ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误。ROW必须提供,例如
UPDATE test_table SET ("column_a") = ROW ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
有没有解释为什么选择这种行为?如果ROW缺少,是否有歧义?
我在 sql server 2016
select @@version
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 2016 (SP2-CU15) (KB4577775) - 13.0.5850.14 (X64) Sep 17 2020 22:12:45 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2012 R2 上的基于内核的许可(64 位)数据中心 6.3(内部版本 9600:)(管理程序)
在 sql server 中的一个简单插入语句中,我有关键字 values
例如:
BEGIN TRANSACTION T1
SELECT @@TRANCOUNT
INSERT INTO [APCore].[usr].[userBusinessArea]
([businessAreaID]
,[userID])
VALUES
(21, 368),
(21, 227419) ,
(21, 99906),
(21, 140470)
SELECT [1]= @@TRANCOUNT
--COMMIT TRANSACTION T1
--ROLLBACK
SELECT [2]=@@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)
问题是,在我运行插入之前,我想使用与 相同的逻辑values来找出这些记录中是否已经有任何记录在表中。
否则你可能会得到这样的结果:
我的做法是:
select top 10 * from
[APCore].[usr].[userBusinessArea]
where …Run Code Online (Sandbox Code Playgroud) 此查询有效:
DECLARE @Ordering NVARCHAR(50)
SET @Ordering = 'aggregateid'
DECLARE @OrderDirectionInt INT
SET @OrderDirectionInt = 0 --1
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY
CASE WHEN LOWER(@Ordering) = 'aggregateid' AND @OrderDirectionInt = 1 THEN AggregateId END DESC,
CASE WHEN LOWER(@Ordering) = 'aggregateid' AND @OrderDirectionInt = 0 THEN AggregateId END ASC
) AS RowNumber,
MyField
FROM
MyTable
) AS TempResults
WHERE TempResults.RowNumber BETWEEN 12 AND 23
Run Code Online (Sandbox Code Playgroud)
我不明白的是,为什么ASC和DESC在后(或外)的CASE语句。看起来ASC和DESC被无条件地放入,这是没有意义的......它可能会解决:
ROW_NUMBER() …Run Code Online (Sandbox Code Playgroud) 在下面的代码(我继承的)中,我收到消息“SQL80001 - ')' 附近的语法不正确”,错误出现在从底部算起的第三行,带有 + 号。我已经看过类似问题的这个答案,但这不是这里的问题。
select
b.batch_id,
b.submitted_dt,
b.batch_nm,
b.paused_cd,
b.job_cnt,
b.start_dt,
b.finish_dt,
m.module_nm,
m.module_id,
mc.hostname
from
tbl_bat_chess b,
tbl_job_bobs j,
tbl_man_holes m,
tbl_monkey_cokes mc
where
b.finish_dt is null
and to_char(b.submitted_dt, 'DD-MON-YYYY') = to_char(sysdate, 'DD-MON-YYYY')
and (to_number(sysdate - b.submitted_dt) * 1440) > 5 -- 5 minutes
and b.batch_id = j.batch_id
and b.batch_nm like '%EXAMPLE%'
and j.module_id = m.module_id
and m.proc_group_id not in (10, 18)
and j.machine_id = mc.machine_id (+)
group by b.batch_id, b.submitted_dt, b.batch_nm, b.paused_cd, b.job_cnt, b.start_dt, …Run Code Online (Sandbox Code Playgroud) 我有这个脚本可以正常工作,但是当我更改目录路径时,它似乎收到此语法错误“字符串后未关闭的引号”会导致这种情况的问题。
DECLARE @db VARCHAR(50),
@sql NVARCHAR(400),
@country varchar(100)
DECLARE barcardi cursor for
select [ProjectDB] from [DBA].[dbo].[BacardiExport] order by [Country] asc
open barcardi
fetch next from barcardi into @db
while @@FETCH_STATUS = 0
begin
set @country = (select country from [DBA].[dbo].[BacardiExport] where [ProjectDB] = @db)
set @sql = 'BACKUP DATABASE ['+@db+'] TO DISK = N''D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_'+@country+'_'+@db+'.bak'' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10'
exec sp_executesql @sql
--print @sql
set @country = (select country from [DBA].[dbo].[BacardiExport] where [ProjectDB] = @db)
set …Run Code Online (Sandbox Code Playgroud) 我有一个包含some_column数据类型列的表integer。
我注意到我的 PostgreSQL 10.6 实例足够智能,可以将以下两个查询解释为相同:
select * from my_table where some_column = 5; -- no quotes
select * from my_table where some_column = '5'; -- quotes added
Run Code Online (Sandbox Code Playgroud)
在列的where子句中添加引号有什么影响integer?
它会对一个包含 2000 万行的大表产生性能影响吗?
(有一个索引some_column。)
postgresql performance syntax postgresql-10 query-performance
我正在尝试返回重叠多边形的数量。问题是它抱怨我的“$1”标志:
Run Code Online (Sandbox Code Playgroud)Error is "SQL state: 42601", syntax error at "$1".
为什么是这样?我在这里完全是初学者,除了用符号引用参数之外,我无法在网上找到解决方案$。
CREATE OR REPLACE FUNCTION any_overlap (x text)
RETURNS integer AS $$
DECLARE amount INTEGER;
BEGIN
SELECT COUNT(*) INTO amount FROM $1 a
INNER JOIN $1 b ON
(a.polygon && b.polygon AND ST_Relate(a.polygon, b.polygon, '2********'))
WHERE a.ctid != b.ctid;
RETURN amount AS id;
END; $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud) 我有 sql 查询作为
select sourceIP, sum(sourceBytes)
from flows
group by sourceIP
order by sum(sourceBytes) desc
Run Code Online (Sandbox Code Playgroud)
这带来的结果(虚拟)为:-
sourceIp SourceBytes
192.168.1.2 100
192.168.1.3 79
192.168.1.4 67
192.168.1.5 4
192.168.1.6 4
Run Code Online (Sandbox Code Playgroud)
现在,如果我将查询更改为
select sourceIP, sum(sourceBytes)
from flows
where sourceBytes > 50
group by sourceIP
order by sum(sourceBytes) desc
Run Code Online (Sandbox Code Playgroud)
输出为
sourceIp SourceBytes
192.168.1.2 150
192.168.1.3 40
Run Code Online (Sandbox Code Playgroud)
我现在无法访问数据库,我无法拉/显示真实的表值,但这里我想用greaterthen 语句说明输出已更改。我是第二个查询的视图,我只想处理结果而不是将flows表中的所有值处理为更大范围的值,即 50。我想知道这两个查询的级别不同。谢谢。
如何在不丢失自动创建的索引的情况下删除约束?
如果可以使用单个查询。
聚合和窗口函数的语法令人困惑,这不起作用,
SELECT (max(x)+5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
虽然这有效
SELECT 5+max(x) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
如果运算符是可交换的,那很好,但我试图将间隔除以秒(在我的特定情况下,尽管我解决了它)。有没有办法简化这个。
SELECT (max(x)/5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
所以不需要另一个封装查询?这是一个 PostgreSQL 的东西,还是一个 SQL 的东西?有没有办法消除查询的歧义?
第三方 API 公开接受“SQL”查询的端点。他们的示例是简单的SELECT语句,但我想编写更复杂的查询。
他们没有指定他们使用的是哪个 SQL 品牌,这意味着我不知道应该遵循的确切语法。
如何使用一个或多个 SQL 查询(无命令行访问、文件权限等)识别 SQL 品牌(SQL Server、MySQL、Azure SQL、Postgres 等)?
syntax ×13
postgresql ×4
sql-server ×4
oracle ×2
query ×2
aggregate ×1
alias ×1
constraint ×1
dynamic-sql ×1
index ×1
insert ×1
join ×1
performance ×1
plpgsql ×1
postgis ×1
row ×1
select ×1
trigger ×1