小编Rom*_*kar的帖子

Postgres数组前缀匹配

我在Postgres帽子中有一个数组搜索匹配至少一个标签,如下所示:

SELECT * FROM users WHERE tags && ['fun'];

| id | tags      |
| 1  | [fun,day] | 
| 2  | [fun,sun] |
Run Code Online (Sandbox Code Playgroud)

可以匹配前缀吗?就像是:

SELECT * FROM users WHERE tags LIKE 'f%';

| id | tags      |
| 1  | [fun,day] | 
| 2  | [fun,sun] |
| 3  | [far]     | 
| 4  | [fin]     |
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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

如何为表中的任何列选择类似字符串的记录?

我知道我可以通过使用在t-sql的表中的一列中搜索一个术语like %termToFind%.而且我知道我可以在表格中获得所有列:

SELECT * 
FROM MyDataBaseName.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'MyTableName`
Run Code Online (Sandbox Code Playgroud)

如何在表的每个列上执行类似的comprparison?我有一个非常大的桌子,所以我不能拼出LIKE每一列.

sql t-sql sql-server xquery sqlxml

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

在T-SQL中通过XQuery选择时连接xml值

这是我的示例XML:

<root>
    <element>
        <subelement>
            <value code="code1">value1</value>
            <value code="code2">value2</value>
        </subelement>
    </element>
</root>
Run Code Online (Sandbox Code Playgroud)

这是我的测试查询:

DECLARE @tempTable TABLE (
    ValueCode nvarchar(MAX),
    Value nvarchar(MAX)
)

DECLARE @xml XML
select @xml = cast(c1 as xml) from OPENROWSET (BULK 'C:\test.xml', SINGLE_BLOB) as T1(c1)

INSERT INTO @tempTable
SELECT 
    Tbl.Col.value('subelement[1]/@code', 'NVARCHAR(MAX)'),
    Tbl.Col.value('subelement[1]', 'NVARCHAR(MAX)')
FROM @xml.nodes('//element') Tbl(Col)

SELECT * FROM @tempTable
Run Code Online (Sandbox Code Playgroud)

执行时,查询会给出一行,其中ValueCode列包含NULL,而Value列包含'value1value2'.我想得到的是与分隔符连接的属性和值.例如,我需要ValueCode来包含'code1; code2'和值包含'value 1; 值2' .我怎样才能做到这一点?

xml sql-server xquery sqlxml sql-server-2008

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

与Unique筛选索引合并

所以今天我发现了一个奇怪的SQL Server行为.

假设我有一个这样的表,id是主键

??????????????????????
? id ? name ? active ?
??????????????????????
?  1 ? a    ?      0 ?
?  2 ? a    ?      1 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)

假设我有一个filtered unique index on name where active = 1.现在,我只想为行切换活动,将第一行设置为非活动状态并将第二行设置为活动状态.当我尝试更新它时

update Table1 set 
    active = n.active
from Table1 as t
inner join (values (1, 1), (2, 0)) as n(id, active) on n.id = t.id
Run Code Online (Sandbox Code Playgroud)

工作正常.但如果我尝试合并:

merge Table1 as t
using (values (1, 1), (2, 0)) as n(id, active) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server merge sql-server-2008-r2 filtered-index

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

在特定单词后选择子串

来自这样的字符串

<iframe width="560" height="315" src="https://www.youtube.com/embed/KRFHiBW9RE8" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

我只需要选择源,所以src ="我需要的字符串"之间的单词

我已经尝试过使用IndexOf这个单词src ="但链接没有固定数量的字符来设置结尾.

html c# regex asp.net string

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

在SQL Server中串联或合并两个json对象

我有一个表在一个列中存储json。我想通过合并另一个json更新json值。

就像是:

insert into mytable 
values ('{ "a": "b" ')

update mytable 
set jsonColumn = JSON_MERGE(jsonColumn, '{ "c": 2 }')
Run Code Online (Sandbox Code Playgroud)

这应该导致像这样的json:

{ "a": "b", "c": 2 }
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有这样的JSON_MERGE功能,而JSON_MODIFY只允许我一一修改列。我有太多的东西,包括嵌套属性。

我基本上是在寻找等同于postgres || 级联运算符

sql-server json sql-server-json

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

生命游戏:如何跟踪活跃细胞

现在我已经阅读了其他stackoverflow Game of Life问题,并且还贪婪地使用Google搜索.我知道如何为我的Python生命游戏实现.我想跟踪网格中的活动单元格.问题是我是坚持我应该如何编码.
这就是我的想法,但除此之外,我的智慧结束了:

  • 维护一个ActiveCell列表,该列表由活动
    死或活的单元坐标元组组成.
  • 在计算下一代时,只需遍历ActiveCell列表,计算单元状态并检查状态是否发生变化.
  • 如果状态发生更改,请将所有当前单元格邻居添加到列表中
  • 如果没有,请从列表中删除该单元格
  • 现在问题是:("." - >其他单元格) 如果A满足3)那么它会添加B,C,D 然后如果B也为3)返回true,这意味着它将再次添加A,C(复制)
    B C D
    . A .
    . . .


我考虑使用OrderedSet或其他东西来处理订单并避免重复.但是我仍然遇到了这些问题.我只需要一个方向.

python

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

优化程序将忽略唯一筛选索引和索引视图

假设我有一个这样的表模式:

Partners

ID      Name
1       Test
Run Code Online (Sandbox Code Playgroud)

Partners_Codes

Partner_ID   Code
1            'Test_Code'
Run Code Online (Sandbox Code Playgroud)

我也有独特的聚集索引Partner_IDPartners_Codes:

create unique clustered index IX_Partners_Codes on Partners_Codes (Partner_ID);
Run Code Online (Sandbox Code Playgroud)

现在,当我这样查询时:

select
    P.ID, P.Name
from dbo.Partners as P
    left outer join dbo.Partners_Codes as PC on PC.Partner_ID = P.ID;
Run Code Online (Sandbox Code Playgroud)

SQL Server优化器非常智能,可以查看索引,Partners_Codes而不是查询Partners_Codes,这有利于提高性能.

现在假设我必须添加一个ActivePartners_Codes,因此我可以为每个列添加许多代码Partner,但只有一个代码可以Active.

Partners_Codes2

Partner_ID    Code               Active
1             'Test_Code'             1
1             'Test_Code_old1'        0
1             'Test_Code_old2'        0
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法 - 使用过滤索引Active = 1或在此视图上创建视图和唯一索引:

create table …
Run Code Online (Sandbox Code Playgroud)

sql sql-server database-design query-optimization sql-server-2008-r2

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

SQL 2012 - 遍历XML列表(更好地替代WHILE循环)

使用SQL 2012并将XML传递到存储过程,该存储过程必须接受该输入并为传递给存储过程的XML部分中的每个项目写一行.XML看起来像:

<MyXML>
    <MyMsg>My Text Message</MyMsg>
    <MsgTime>2013-09-25 10:52:37.098</MsgTime>
    <SendToList>
    <SendTo>John</SendTo>
    <SendTo>James</SendTo>
    <SendTo>Rob</SendTo>
    <SendTo>Pete</SendTo>
    <SendTo>Sam</SendTo>
    </SendToList>
</MyXML>
Run Code Online (Sandbox Code Playgroud)

存储过程的输出应该是插入表中的5行(SendTo上面各有一行),并且每个表在该表中的MyMsgMsgTime字段中具有相同的值.

我可以得到数量的计数,SendTo并可以获得XML,SendToList但我不知道如何迭代它来进行插入.

我可以使用以下SQL来获取XML中的内容.

SELECT 
x.value('(/MyXML/MyMsg)[1]', 'VARCHAR(1024)'),
x.value('(/MyXML/MsgTime)[1]', 'DATETIME'),
   @max = x.query('<e> { count(/MyXML/SendToList/SendTo) } </e>').value('e[1]','int'),
   @mlst = x.query('/MyXML/SendTo')
    FROM @XML_In.nodes('//MyXML') i(x)
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用变量和a WHILE来遍历SendToList中的项目,但我知道必须有更好的方法.

SELECT @msgTo= @XML_In.value('(/MyXML/SendToList/SendTo[position()=sql:variable("@cnt")])[1]','VARCHAR(100)')
Run Code Online (Sandbox Code Playgroud)

上面的内容为我提供了SendToList中每个项目的值.
如果我选择变量@mlst,我可以看到我需要循环的XML结构.

<SendToList>
   <SendTo>John</SendTo>
   <SendTo>James</SendTo>
   <SendTo>Rob</SendTo>
   <SendTo>Pete</SendTo>
   <SendTo>Sam</SendTo>
</SendToList>
Run Code Online (Sandbox Code Playgroud)

即使是WHILE作品,它也会一个接一个地插入.我认为可用的方法应该能够完成而不是循环,但我不知道如何使用它们做我需要做的事情.

将不胜感激任何帮助或建议.

xml sql t-sql sql-server sqlxml

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

T-SQL,将 XML 数据加载到局部变量中

我想知道,如何将 XML 内容从任意文件加载到局部变量中?

这适用于固定文件:

DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

但是,我想从任何任意文件加载数据。

这不起作用(因为 BULK 似乎只支持 String 参数)

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下操作(没有成功,因为执行 EXEC 时局部变量(@xml)似乎超出了范围):

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
Run Code Online (Sandbox Code Playgroud)

我猜我需要使用临时表,但是如何使用?

xml sql sql-server sqlxml

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