标签: sql-server-2012

指定 ID 的两行之间的时间差

我试图找出具有相同 ID 的两行之间的时间差(以秒为单位)。

这是一个简单的表格。

在此输入图像描述

该表按myid和排序timestamp。我试图获取具有相同 . 的两行之间的总秒数myid

这就是我的想法。此查询的唯一问题是它计算所有记录的时间差,但不计算相同 ID 的时间差。

SELECT  DATEDIFF(second, pTimeStamp, TimeStamp), q.*
FROM    (
            SELECT  *,
            LAG(TimeStamp) OVER (ORDER BY TimeStamp) pTimeStamp
            FROM    data
        ) q
WHERE   pTimeStamp IS NOT NULL 
Run Code Online (Sandbox Code Playgroud)

这是输出。

在此输入图像描述

我只希望输出以黄色突出显示。

有什么建议么?

SQLFIDDLE

sql-server-2012

1
推荐指数
1
解决办法
1695
查看次数

通过 T-SQL 将 SQL Server 日期时间格式化为 %Y-%m-%d %H:%M:%OS4 %z 格式?

供应商要求我将 SQL ServerDateTime值转换为以下特定时间戳格式%Y-%m-%d %H:%M:%OS4 %z。该查询将被放入他们的软件中以查询我的数据库。

所需的输出似乎可能与R 中的posixct 问题模糊相关;但这是关于 SQL Server 中的输出。除了该字段在他们的软件中显示为空白之外,我没有收到任何具体错误,但它在我的 SQL 界面中有效。

我从 SQL 得到的输出如下:

2016-03-16 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

像这样的另一列的输出没有问题varchar(30)2016-03-16 11:34:36因为它只是在映射到字符串字段时将其视为字符串......但要使其处理它需要采用引用的%Y-%m-%d %H:%M:%OS4 %z格式。

除了数据类型之外,这些差异似乎很微妙,但即使映射到字符串字段,它也无法将 SQL 本机输出映射到其字段中。

我已经尝试过例如

cast(convert(datetime, tn.last_settled, 126) as Varchar(30))
Run Code Online (Sandbox Code Playgroud)

datetime结果Jan 1 1990 12:00AM不是所需的格式。

如何将所需的字符串2016-03-16 11:34:36和日期时间格式从 T-SQL 中的 SQL Server格式2016-03-16 00:00:00.000转换为所需的格式?%Y-%m-%d %H:%M:%OS4 %zdatetime

t-sql sql-server datetime sql-server-2012

1
推荐指数
1
解决办法
6459
查看次数

T-SQL 查询从一个表中选择并插入到另一个表中

请先阅读问题,然后再将其标记为重复项。

我正在尝试将一行插入到 5 列的表中。我希望其中 3 列来自另一个表,我将使用选择查询来读取该表。

INSERT INTO tbl.Log (
     LogDate,
     Object,
     Count,
     Creator,
     LastUpdate)
SELECT TOP 1 
     GETUTCDATE(),
     Object,
     Count, -- I need to +1 to this
     'John Smith',
     LastUpdate
FROM tbl.Objects
WHERE ObjectID = '123'
ORDER BY LastUpdate DESC
Run Code Online (Sandbox Code Playgroud)

我可以在这里看到我做错了什么:

  • GETUTCDATE()不应出现在 SELECT 中,因为它不是列名。它去哪里了呢?
  • 'John Smith'作为创造者也是如此
  • Count 列是一个 int;我需要读取现有的数字并在插入之前加一。

我可以通过执行两个单独的查询并将数据解析到SELECT查询中来手动完成此操作INSERT,但我正在尝试改进我的 SQL。

sql t-sql sql-server-2012

1
推荐指数
1
解决办法
1418
查看次数

SQL Server 2012 安装删除强制密码策略

我正在尝试以混合模式安装 SQL Server 2012,我需要提供一个简单的sa登录密码,但根据密码策略,它需要很强。有没有办法提供一个简单的密码。我可以在安装 SQL Server 2012 时删除强制密码策略吗?

sql-server-2012

1
推荐指数
1
解决办法
2724
查看次数

SQL 查询计算具有相同值的行数

我有这个表数据:

在此输入图像描述

我想执行一个 SQL 查询,该查询将给出每个城市不同贷款申请的总数。

例如,我期望这个输出

City Wexford
Loans 1

City Waterford 1 
Loans 1

City Galway
Loans 3
Run Code Online (Sandbox Code Playgroud)

知道我需要执行什么样的查询才能获取每个城市的不同贷款计数吗?

sql t-sql sql-server sql-server-2012 sql-server-2014

1
推荐指数
1
解决办法
2万
查看次数

使用正则表达式检索 html 标签之间的字符串

<p>如何使用正则表达式获取html 标签之间的字符串</p>

\n\n
\'<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>\xe2\x80\x8bJust help me!</p></div>\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

此致,\n埃利奥·费尔南德斯

\n

sql-server sql-server-2012

1
推荐指数
1
解决办法
1615
查看次数

如何在 MS SQL Server 上的 Containstable 中强调不敏感的全文搜索

我正在尝试更新存储过程以便能够比较不区分重音的数据。当前存储过程使用 Containstable 进行全文搜索,但比较是重音敏感的。是否有机会为包含表设置排序规则(例如Latin1_General_CI_AI)?

db 的排序规则区分重音。

我正在使用 MS SQL Server 2012 Express。

t-sql containstable sql-server-2012

1
推荐指数
1
解决办法
1663
查看次数

SQL Server中如何将一个表的数据合并到另一个表

我有这样的表:

表A:

customerId     mobNo1    mobNo2    mobNo3
-----------------------------------------
123            999       997       987
124            888       666       555
Run Code Online (Sandbox Code Playgroud)

表B:

customerId     mobNumbers    
-------------------------
123            999       
123            997       
123            987       
124            888       
124            666       
124            555
Run Code Online (Sandbox Code Playgroud)

我需要编写一条MERGE语句,以便将表 A 中的数据更新或插入到表 B 中

这是我尝试过的:

MERGE tableB tgt
USING (SELECT * FROM tableA) src ON src.customerId = tgt.customerId

WHEN MATCHED THEN
    UPDATE 
        SET mobNumbers = src.mobNo1,
            mobNumbers = src.mobNo2,
            mobNumbers = src.mobNo3,
 
WHEN NOT MATCHED THEN 
    INSERT (customerID, mobileNumbers)
    VALUES (src.customerID, src.mobNo1),
           (src.customerID, src.mobNo2), 
           (src.customerID, src.mobNo3); …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge ssms sql-server-2012

1
推荐指数
1
解决办法
4428
查看次数

如何在 SQL Server 中获取沿列的 json 字符串

我有一个关于 SQL Server 的问题:如何使用几列获取 json 格式并获取列?

表:雇员

id  | name | sal | depno
----+------+-----+------
1   | a    | 100 | 10
2   | b    | 200 | 20
Run Code Online (Sandbox Code Playgroud)

根据这些数据,我想要这样的输出:

id  | name | sal  | deptno | empjsonstring
----+------+------+--------+-------------------------------------------
1   | a    | 100  | 10     | {"id":1,"name":"a","sal":100,"deptno":10}
2   | b    | 200  | 20     | {"id":2,"name":"b","sal"200,"deptno":20}
Run Code Online (Sandbox Code Playgroud)

我尝试过这个查询:

select * 
from emp 
for json path, include_null_values, without_array_wrapper 
Run Code Online (Sandbox Code Playgroud)

但这并没有返回预期的结果。

您能告诉我如何在 SQL Server 中编写查询来完成此任务吗?

sql sql-server json sql-server-2012 sql-server-2016

1
推荐指数
1
解决办法
768
查看次数

如何删除大表的嵌套循环连接

SQL Server中有3个数据量很大的表,每个表包含大约100000行。有一个 SQL 从三个表中获取行。它的性能非常糟糕。

WITH t1 AS 
(
    SELECT 
        LeadId, dbo.get_item_id(Log) AS ItemId, DateCreated AS PriceDate
    FROM 
        (SELECT 
             t.ID, t.LeadID, t.Log, t.DateCreated, f.AskingPrice
         FROM 
             t
         JOIN 
             f ON f.PKID = t.LeadID
         WHERE 
             t.Log LIKE '%xxx%') temp
)
SELECT COUNT(1)
FROM t1
JOIN s ON s.ItemID = t1.ItemId
Run Code Online (Sandbox Code Playgroud)

在检查其估计执行计划时,我发现它使用了大行的嵌套循环连接。抢劫看下面的截图。图像中的顶部部分返回 124277 行,底部部分执行了 124277 次!我想这就是它这么慢的原因。

在此输入图像描述

在此输入图像描述

我们知道嵌套循环在处理大数据时存在很大的性能问题。如何删除它,并使用散列连接或其他连接代替?

编辑:以下是相关功能。

CREATE FUNCTION [dbo].[get_item_Id](@message VARCHAR(200))
RETURNS VARCHAR(200) AS
BEGIN
    DECLARE @result VARCHAR(200),
            @index int

    --Sold in eBay (372827580038).
    SELECT @index = PatIndex('%([0-9]%)%', @message)
    IF(@index = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server nested-loops database-performance sql-server-2012

1
推荐指数
1
解决办法
4639
查看次数