小编Shn*_*ugo的帖子

INT和单个连字符( - )的奇怪CAST行为

我刚刚回答了这个问题:SQL中的Concate主键

我遇到了一个奇怪的行为:

SELECT 5 + '-' +  8 
Run Code Online (Sandbox Code Playgroud)

返回13

SELECT CAST('-' AS INT) 
Run Code Online (Sandbox Code Playgroud)

返回0,解释了以上内容......

但是:为什么一个连字符会被隐含地归零?

顺便说一下:单个+或(多个)空白字符串也一样......

这与CAST连字符( - )与Decimal相关,但指出这样一个事实,即转换为十进制不会产生这些结果......

t-sql sql-server int casting

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

SQL Server中的XPath fn:data导致表达式中的类型转换可能会影响查询计划选择中的“ CardinalityEstimate”

我有一个xml变量,其中包含一组要在表中查找的ID。查询时,我尝试了多个版本,但以下(根据我的测试)似乎是最快的:

declare @idsxml as xml (IdSchemaColelction) = '<root><Id>505766</Id><Id>458073</Id><Id>460689</Id><Id>464050</Id></root>'

SELECT * FROM entity
WHERE @idsXml.exist('/root/Id[data(.)=sql:column("id")]') = 1
Run Code Online (Sandbox Code Playgroud)

问题在于查询计划具有以下警告“表达式中的类型转换(CONVERT_IMPLICIT(sql_variant,CONVERT_IMPLICIT(numeric(38,10),[xmlTest]。[dbo]。[dbo]。[entity]。[id],0),0 ))可能会影响查询计划选择中的“ CardinalityEstimate”

我创建了一个XML模式,该模式将Id的文本定义为整数,因此我希望这data(.)=sql:column("id")是整数之间的比较,但此警告可能会导致其他情况。

在这种情况下,删除此警告的正确方法是什么?这是否会对性能产生影响?

表定义和架构定义:

CREATE XML SCHEMA COLLECTION IdSchemaColelction AS  '
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" >
  <xs:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" 
             schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"/>
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Id" type="sqltypes:int" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
'
go

create table entity ( id int not null  primary key)
Run Code Online (Sandbox Code Playgroud)

xml sql-server xpath xquery sql-server-2012

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

如何获取 XML 节点的索引/位置

我试图在使用 sql 选择值时获取 xml 节点的索引:

这是代码:

declare @myxml xml ='
<Departments>
    <Department>
        <Employee>
            A
        </Employee>
        <Employee>
            B
        </Employee>
    </Department>

    <Department>
        <Employee>
            C
        </Employee>
        <Employee>
            D
        </Employee>
    </Department>
</Departments>'

Select Emp = m.value('.','varchar(30)') 

from @myxml.nodes('Departments/Department/Employee') X(m)
Run Code Online (Sandbox Code Playgroud)

上述查询的输出:

Emp 
A
B
C
D
Run Code Online (Sandbox Code Playgroud)

预期输出:

Emp  Department_Index

A         1
B         1
C         2
D         2
Run Code Online (Sandbox Code Playgroud)

即我想要与部门下每个员工相对应的部门索引。这里员工A和B属于部门第​​一部门,员工C和D属于部门第​​二部门。

所以我希望这将复杂的 XML 子项与没有唯一键的父项连接起来。

xml sql t-sql sql-server

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

将 BCP 命令与 sql server Local DB 一起使用

我正在尝试在 sql server 本地 db 数据库上使用 bcp。首先 bcp 甚至可以在本地数据库上工作吗?如果我尝试在常规 sql server 数据库上使用此命令。

exec master.dbo.xp_cmdshell 'bcp db.dbo.table out c:\test\results.txt -w -T -S <server>'
Run Code Online (Sandbox Code Playgroud)

它工作正常......如果我将服务器更改为localhost\(localdb)\v11.0它说它找不到实例,则没有错误。香港专业教育学院试图寻找整个网络。我想知道如何让它与本地数据库一起工作。任何帮助都会受到赞赏

sql-server sql-server-2012 localdb

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

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

将int转换为时间(奇怪的值)

通过其他人构建的服务器查看,我注意到时间以int格式存储.通过插入一些数据,我可以进行以下扣除:

285571对应于上午6:51:00(加减去2秒)

对于那些要求的人,日期存储在自19/1年1月1日以来的另一列中.

问题是:用于时间转换的神奇公式是什么?

谢谢.

t-sql sql-server int time types

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

如何从T-SQL中的字符串中提取主题标签

Declare @text='i #want to extract all #hastag out of this string, #delhi #Traffic'
Run Code Online (Sandbox Code Playgroud)

所需的输出将在string: "#want,#hastag,#delhi,#Traffic"或table中.

sql t-sql sql-server parsing sql-server-2008

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

选择十六进制/字符转换

我在 SQL 数据库中有一些数据以下面的格式存储,我想将其转换为可读的字符串:

540045005300540049004E00470031003200330034
Run Code Online (Sandbox Code Playgroud)

我想运行某种 SELECT 语句来返回应该是的文本TESTING1234

它似乎是十六进制格式,每个字符之间用 00 分隔,所以如果我运行这些语句:

SELECT CHAR(0x54)
SELECT CHAR(0x45)
Run Code Online (Sandbox Code Playgroud)

这将返回:

T
E
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在一条语句中转换整个字符串吗?

谢谢!

t-sql sql-server encoding hex sql-server-2012

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

如何使用 TSQL 将 JSON 列解析为表

我正在尝试打开一个 JSON 字符串并将每个键作为它自己的列。JSON 列位于具有键和多态 ID 的元数据表中。

在此处输入图片说明

我希望能够将每个键解析为它自己的列,并为每个多态 id 填充其对应的值。

在此处输入图片说明

我可以使用 json_query 逐个解析每个键,但是我看到有一个函数调用 openjson 可以解析整个字符串,但是我不知道如何使用它,因为文档中的示例是在集合上应用该函数值而不是表中的列。如果有比使用 json_query 更简单的方法来解析 JSON 字符串?

sql-server json sql-server-2016

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

通过聚合将表连接到自身

我正在尝试(有效地)从连接表中获取行,其中startdate是cpid中的最新行 - 对于选定的cpid.

这是一个连接表中数据的示例,其中我想要用<<<标记的行

connid   cpid  startdate
1        20    7/17/16
2        20    8/23/16
3        20    9/12/16 <<<
4        30    6/17/16
5        30    8/23/16 <<<
6        40    2/24/16
7        40    3/17/16
8        40    5/18/16 <<<
etc...
Run Code Online (Sandbox Code Playgroud)

此查询返回最新的startdate和cpid,但我不确定如何将其与自身连接以获得我需要的结果:

select cpid, max(startdate)
from connections
where cpid in (  
20,
30,
40
)
group by cpid
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果如下:

connid   cpid  startdate
3        20    9/12/16
5        30    8/23/16
8        40    5/18/16
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!
ROBM

sql t-sql sql-server self-join

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