小编Tab*_*man的帖子

在Sql server字符串连接中处理NULL

我有以下SQL查询

select s.comments + s.further_comments from dbo.samples s where id = 1234
Run Code Online (Sandbox Code Playgroud)

但是,如果s.comments或s.further_comments为NULL,则整个字符串返回NULL

如何将NULL值转换为空字符串或至少仅返回此字符串中的非NULL值?

谢谢

sql sql-server string string-concatenation

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

Convert a 12 hour format to 24 hour format in sql server

there are date values in the below format,in one of the sql server 2000 tables

10/1/2013 10:39:14 PM
10/1/2013 6:39:04  PM
10/1/2013 8:19:31  AM
10/1/2013 3:35:40  AM
Run Code Online (Sandbox Code Playgroud)

how to convert the above format data values into a 24hour date format,as shown below

10/1/2013 10:39
10/1/2013 18:39
10/1/2013 8:19
10/1/2013 3:35
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2

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

查找数据中的缺失日期

我收到来自多个天线的每日txt数据文件.文件的命名约定是:

独特的天线ID +年+月+日+随机3位数

我解析了文件名并创建了一个像这样的表:

AntennaID    fileyear    filemonth    fileday    filenumber     filename
0000         2016        09           22         459            000020160922459.txt
0000         2016        09           21         981            000020160921981.txt
0000         2016        09           20         762            000020160920762.txt
0001         2016        09           22         635            000120160922635.txt
.
.
.
etc. (200k rows)
Run Code Online (Sandbox Code Playgroud)

有时天线发送的文件多于1个或根本没有文件.如果发送的文件超过1,则唯一的3位数文件编号会区分文件,但我正在尝试查找未发送文件的日期.

我已经尝试了几个groupby语句来比较给定月份的数据文件数量,看看它是否与那个月的天数相匹配 - 但问题是有时候天线每天发送超过1个文件,这可能是人为的如果我们只是比较计数,则弥补"遗失"文件.

我正在寻找一种更健壮的方法来查找丢失文件的日期或日期范围.我已经查看了Partition和Over函数,感觉可能存在潜力,但我不确定如何使用它们,因为我对SQL很新.

我正在使用Microsoft SQL Server 2016

sql sql-server missing-data gaps-and-islands sql-server-2016

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

ALTER TABLE 语句与 CHECK 约束冲突

我想在两个数据库之间创建外键。碰巧这些表有数据,所以当我制作外关系时,出现了错误。

我发现当您的表有数据时会发生错误。那么如何不验证现有数据呢?

ALTER TABLE [contrato_sigob].[relacion_institucion_categoria]
ADD CONSTRAINT CHECK_CATEGORIA
CHECK([dbo].[func_CHECK_CATEGORIA](id_categoria)=1);
Run Code Online (Sandbox Code Playgroud)

错误说:

The ALTER TABLE statement conflicted with the CHECK constraint "CHECK_CATEGORIA". The conflict occurred in database "SIGOB_Contraloria", table "contrato_sigob.relacion_institucion_categoria", column 'id_categoria'.
Run Code Online (Sandbox Code Playgroud)

sql database sql-server foreign-keys

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

如何查询所有数据库中的表中的列

我希望查询表存在的每个数据库中的表中的列.到目前为止,我有以下内容,但不知道从哪里开始:

DECLARE @tblName VARCHAR(5000) = 'myTable'

SELECT name
FROM sys.databases
WHERE CASE
    WHEN state_desc = 'ONLINE'
        THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].['+@tblName+']','U')
    END IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以使用我正在查找的表返回所有数据库,但我希望SQL服务器上每个数据库中指定表中的特定列的所有列数据.提前谢谢你的帮助.

sql t-sql sql-server

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

为什么我使用 MySQL 的子查询别名在“where 子句”中得到未知列?

当我尝试为子查询提供别名,然后在 Where 子句中引用它时,我收到一条错误消息:“where 子句”中的未知列“point_status”

SELECT goals.id, goals.status, 
ifnull((SELECT point_status FROM pts WHERE point_id = ?), goals.status) as point_status
FROM   goals
WHERE  goals.name = ? AND point_status > 1
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不允许我使用这个别名。通过不修改查询的功能,是否可以在 where 子句中以某种方式使用该别名?

mysql sql

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

使用一个 SQL 查询更新多行上的单列

我需要更新数据库中超过一千行的单列。通常,当我需要这样做时,我会执行以下操作:

UPDATE [table] SET DATA="FOO" WHERE ID=23;
UPDATE [table] SET DATA="ASD" WHERE ID=47;
UPDATE [table] SET DATA="FGH" WHERE ID=83;
UPDATE [table] SET DATA="JKL" WHERE ID=88;
UPDATE [table] SET DATA="QWE" WHERE ID=92;
UPDATE [table] SET DATA="BAR" WHERE ID=97;
Run Code Online (Sandbox Code Playgroud)

我觉得应该有一种方法可以轻松做到这一点,但是在网上搜索后,我找不到解决方案。

我所希望的是:

-- THIS DOES NOT WORK
UPDATE [table]
  SET DATA=("FOO", "ASD", "FGH", "JKL", "QWE", "BAR") 
  WHERE ID=(23, 47, 83, 88, 92, 9);
Run Code Online (Sandbox Code Playgroud)

需要注意的一条重要信息是,我总是设置一列,即跨一组特定行的同一列。

有谁知道最好的方法来做到这一点?

sql

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

SQL选择Distinct列和最新日期

我希望根据日期选择一个表的最新记录,但每个网址只有一个不同的列表.表结构是这样的;

ID        URL          DateVisited
1         google.com   01-01-2016
2         yahoo.com    01-02-2016
3         google.com   12-30-2015
4         google.com   02-01-2016
Run Code Online (Sandbox Code Playgroud)

所以我想要的结果集

google.com     02-01-2016
yahoo.com      01-02-2016
Run Code Online (Sandbox Code Playgroud)

在我的实际查询中我会有更多的条件,但只想在点击日志中获取单个最新记录,而不是列出不同的网址和日期,只是不同的网址和最新日期.

sql sql-server distinct greatest-n-per-group

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

SQL Server:使用MERGE语句更新两个表

我正在尝试使用一个MERGE语句来使用单个源 (CTE) 更新 2 个表。当我只使用 1 个合并时它有效,但是当我添加第二个时,它返回一个错误:

消息 208,级别 16,状态 1,过程 mn_SeoUrl_UpdateBulk,第 46 行
无效的对象名称“ cte ”。

是否可以通过合并更新 2 个表?如果可能的话,我做错了,我希望有人可以告诉我这样做的正确方法是什么。

任何帮助深表感谢。

谢谢你。

这是我的失败代码(错误的列名):

WITH cte AS 
( 
    SELECT
        [u].[col1], [u].[col2], [u].[col3], 
        CASE                                        
           WHEN [u].[col1] LIKE 'L%' 
              THEN 'c/' + [u].[col2] + '/' + [u].[col3]
           WHEN [u].[col1] LIKE 'M%' 
              THEN 'm/' + [u].[col2] + '/' + [u].[col3]
        END [col4]
    FROM
        (SELECT
             [st1].[col1], [st1].[col2], [st1].[col3]
         FROM
             [dbo].[sourcetable1] [st1]
         INNER JOIN 
             [dbo].[sourcetable2] [st2] ON [st1].[ID] = [st2].[ID]
         WHERE
             [pd].[col2] <> 0) …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge stored-procedures

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

如何在SSMS中检查表的约束

我想查看 SSMS 中表的属性。
我已经看到“突出显示表名称”并单击某些内容可以提供有关表的完整详细信息,例如列描述、约束名称及其描述等。

有人可以告诉我如何使用 SSMS 做到这一点吗?

sql sql-server ssms

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