标签: t-sql

用空格替换列中的特殊字符

我正在尝试编写一个用空格替换特殊字符的查询。下面的代码有助于识别行。(字母数字字符、逗号和空格有效):

SELECT columnA
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud)

如何将替换函数集成到 select 语句中,以便结果集中除字母数字、逗号和空格之外的所有字符都替换为 ' '(空格)。这个不行:

SELECT replace(columnA,'%[^a-Z0-9, ]%',' ')
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2 replace

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

SQL SERVER 2012 中的 TABLESAMPLE(10) 和 TABLESAMPLE(10 PERCENT) 有什么区别

我对 TABLESAMPLE 的使用的理解是它返回结果集中前 n% 的行,其中 TABLESAMPLE(n)

所以我写了以下查询来检查(因为我正在学习 T-SQL)

SELECT FirstName,
       MiddleName,
       LastName
FROM Person.Person TABLESAMPLE(10)

SELECT FirstName,
       MiddleName,
       LastName
FROM Person.Person TABLESAMPLE(10 PERCENT)
Run Code Online (Sandbox Code Playgroud)

每次执行查询时,每个查询都会返回不同数量的行。

所以我显然不理解TABLESAMPLE。有人能解释一下吗?

sql-server t-sql

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

如何将 TempDB 文件移动到不同的驱动器或文件夹?

如何将我的TempDB 数据或日志文件从现在的任何位置移动到不同的驱动器或文件夹

sql-server t-sql tempdb datafile

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

如何透视 SQL Server 中的多个列?

将表格“展平”成单行的最佳方法是什么?

例如,使用下表:

+-----+-------+-------------+------------------+
| Id  | hProp | iDayOfMonth | dblTargetPercent |
+-----+-------+-------------+------------------+
| 117 |    10 |           5 |           0.1400 |
| 118 |    10 |          10 |           0.0500 |
| 119 |    10 |          15 |           0.0100 |
| 120 |    10 |          20 |           0.0100 |
+-----+-------+-------------+------------------+
Run Code Online (Sandbox Code Playgroud)

我想生成下表:

+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
| hProp | iDateTarget1 | dblPercentTarget1 | iDateTarget2 | dblPercentTarget2 | iDateTarget3 | dblPercentTarget3 | iDateTarget4 | dblPercentTarget4 |
+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
|    10 |            5 |              0.14 |           10 …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot t-sql

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

在表上添加 PERIOD FOR SYSTEM_TIME 失败

我有:

  • 包含现有数据的表格
  • SQL Server 2016 SP1
  • SQL Server 管理工作室 17.5

我正在使用以下语句使我的表成为临时表:

ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]
ADD [SysStartTime] DATETIME2(0) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysStart DEFAULT GETUTCDATE()  
   ,[SysEndTime] DATETIME2(0) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysEnd DEFAULT CONVERT(DATETIME2(0), '9999-12-31 23:59:59'),   
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]); 

ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]   
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.AnalysisCustomRollupsV2JoinGroupsChanges));
Run Code Online (Sandbox Code Playgroud)

问题:

在我的本地 SQL 实例上,我有很多数据库;查询在其中一些上成功运行非常奇怪,而在其中一些上它给了我以下错误:

消息 13542,级别 16,状态 0,第 51 行 ADD PERIOD FOR SYSTEM_TIME 在表 'dbo.AnalysisCustomRollupsV2JoinGroups' 上失败,因为有打开的记录,期间的开始时间设置为将来的某个值。

有时,当我调试/执行查询时,初始查询运行成功。

我读到,这可能是因为我在表中有现有数据。所以,我改变了这样的逻辑:

  • 创建缓冲表并用所有记录填充它
  • 删除原表中的记录
  • 创建时态表
  • 将记录移回并删除缓冲表

再说一次,在某些数据库上它是可以的,而在其他数据库上则不是。试图解决这个问题,我 …

sql-server t-sql temporal-tables sql-server-2016

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

使用“[ ]”通配符将 ](右方括号)与 PATINDEX 匹配

我正在 T-SQL † 中编写自定义 JSON 解析器。

出于解析器的目的,我使用了PATINDEX从标记列表中计算标记位置的函数。在我的情况下,令牌都是单个字符,它们包括以下内容:

{ } [ ] : ,

通常,当我需要找到几个给定字符中的任何一个的(第一个)位置时,我会使用这样的PATINDEX函数:

PATINDEX('%[abc]%', SourceString)
Run Code Online (Sandbox Code Playgroud)

然后,该函数将给我aorb或 or的第一个位置c——以最先找到的为准—— in SourceString

现在我的问题似乎与]角色有关。一旦我在字符列表中指定它,例如像这样:

PATINDEX('%[[]{}:,]%', SourceString)
Run Code Online (Sandbox Code Playgroud)

我的预期模式显然被破坏了,因为该函数从未找到匹配项。看起来我需要一种方法来转义第一个,]以便PATINDEX将其视为查找字符之一而不是特殊符号。

我发现这个问题询问了一个类似的问题:

但是,在这种情况下,]不需要在方括号中简单地指定,因为它只是一个字符,并且可以在不使用方括号的情况下指定。使用转义的替代解决方案仅适用于LIKE而不适用于PATINDEX,因为它使用一个ESCAPE子条款,由前者支持而不是由后者支持。

所以,我的问题是,有没有什么办法去寻找一个]PATINDEX使用[ ]通配符?或者有没有办法使用其他 Transact-SQL 工具模拟该功能?

附加信息

这是我需要使用PATINDEX上述[…]模式的查询示例。这里的模式有效(虽然有点),因为它不包含]字符。我也需要它来工作] …

sql-server t-sql pattern-matching sql-server-2014 string-searching

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

Please explain what does "for xml path(''), TYPE) .value('.', 'NVARCHAR(MAX)')" do in this code

In this code I am converting the subjects(columns) English , Hindi , Sanskrith , into rows

DECLARE @colsUnpivot AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

 select @colsUnpivot 
               =stuff(
         (select ',' + quotename (C.name)
          from sys.columns c
          where c.object_id = OBJECT_ID('dbo.result2')
          for xml path(''), TYPE) .value('.', 'NVARCHAR(MAX)'),
        1, 8, ''
    );

print @colsunpivot

select  @query 
              = 'select Name, Subject,Marks
                 from result2
                 unpivot
                        (
                          marks for subject in (' + @colsunpivot + ')) as tab'

exec sp_executesql @query;
Run Code Online (Sandbox Code Playgroud)

Please explain what does for xml …

sql-server t-sql unpivot

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

为什么这个查询,缺少一个 FROM 子句,而不是错误?

所以我们有一个带有错字的子查询的查询。它缺少 FROM 子句。但是当你运行它时,它不会出错!为什么!?


SELECT

    1
   ,r.id
   ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56'
   ,GETDATE()
   ,1
   ,'Y'
   ,'N'
   ,oldItem.can_view
   ,oldItem.can_update

FROM Role r

JOIN RoleObject oldReport
    ON r.customer_id = oldReport.customer_id

JOIN RoleItem oldItem
    ON oldReport.id = oldItem.role_object_id
        AND r.id = oldItem.role_id

WHERE r.id NOT IN (SELECT
        role_id
    WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56')

AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2017

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

为什么 SQL 使用相同的 XML 查询结构进行索引扫描和查找?

我已经设置了一个测试来对 SQL 服务器中的 xml 性能进行基准测试。

测试设置

  • 一百万行数据
  • XML 定义的具有主键的列
  • 一个主要的 XML 索引
  • 路径上的辅助 XML 索引
  • XML 数据在格式上相似,但在每个文档中都有可变的标签名称

表和索引设计

CREATE TABLE [dbo].[xml_Test]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [GUID] [varchar](50) NULL,
    [JSON_Data] [varchar](max) NULL,
    [XML_Data] [xml] NULL,
    CONSTRAINT [PK_xml_Test] PRIMARY KEY CLUSTERED ([ID] ASC)
);

ALTER TABLE [dbo].[xml_Test] ADD  CONSTRAINT [DF_xml_Test_GUID]  DEFAULT (newid()) FOR [GUID];
ALTER TABLE [dbo].[xml_Test] ADD  CONSTRAINT [PK_xml_Test] PRIMARY KEY CLUSTERED ([ID] ASC);

CREATE PRIMARY XML INDEX [PK_xml] ON [dbo].[xml_Test]
(   [XML_Data]);

CREATE XML INDEX [IX_xml_Path] ON [dbo].[xml_Test] …
Run Code Online (Sandbox Code Playgroud)

performance xml sql-server t-sql index-tuning

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

TSQL 查询中奇怪的条件语法:“<=+” 它有什么作用?

我正在努力诊断 TSQL 中遗留查询的问题。查询中返回的列之一是:

CASE WHEN PaidDate >= '2021-01-01' AND PaidDate <=+'2021-10-31' THEN WO ELSE 0 END AS dYTDWO, 
Run Code Online (Sandbox Code Playgroud)

我以前没有见过“<=+”作为条件,并且在网上找不到任何对此的参考。

谁能对此做出解释?SSMS 对此非常满意,并且查询得以执行。

谢谢。

sql-server t-sql case

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